mainvisual

僕は、あるサービスを作りたくなりました。それは、「ブログリンクカードをユーザーが自由にデザインすることの出来るサービス」というものでした。しかし、サービスの特性上、サーバー側であらゆるサイトをクロールして、情報を収集、管理をする必要があります。設計の段階で、ユーザー側のサービスと、クローリングサービスの2つにマイクロサービスとして分割し、それぞれをapiで通信する方法がベストだということになりました。

システム上、絶対に不可欠なのがデータベースです。日本語での情報が豊富という理由から、データベースはMySQLを採用することにしました。しかし、データベースを運用していくには、ある程度の基礎知識が欠かせません。今の僕のレベルでは、SQL言語が分かる程度だったので、データを絶対に壊さないためにレプリケーションやサーバー分割、テーブルの型など、細かいところまで勉強する必要がありました。

ほとんど初心者の僕が、MySQLのレベルを実際に運用出来るレベルまで持って行くには、どのようなことをするのが一番手っ取り早いかを考え、お伝えできればと思っています。

効率的なMySQLの学習ステップ

習うより慣れろ!本やネットの記事を見て、実機で試す方が覚える!という人もいると思います。MySQLを学びたての頃に、僕もこの方法で学習をしていたのですが、なかなか覚える事が出来ませんでした。

というのも、MySQLは実機にインストールするだけでもかなりの手順を踏まなければなりません。MySQLを調べて、ダウンロードしてインストール(今は、brewを使うことでインストールすることがかなり簡単になりましたが、mysqlを学ぶためにbrewも学ばなければならないとか、目的を見失いそう…)。英語を読まなければならないこともあると思います。インストールが終わった後は、mysqldを起動して、mysqlクライアントからアクセス。それでやっとSQL言語がが試せるわけです。

そんな難しい手順は今は省いていいと思います。たくさん学んだあとであればMySQLについての理解が進んでいるので、難なく理解が出来ると思います。

さて、学習のステップについてさっさと進んでしまいましょう。 今日、お届けする「効率的なMySQLの学習ステップ」は以下の5つです。

  1. MySQLなどのRDBMSの役割を知る
  2. SQL言語について知る
  3. MySQLの概要と環境構築について知る
  4. MySQLのデータ型と独自の構文について知る
  5. MySQLを使った実践的な開発をする(トランザクション、日本語処理、ユーザー管理、レプリケーションなどを含む)

僕がMySQLを学んできた上で、この通りに実践すればおそらく最短で学ぶことが出来るだろうと思った手順を紹介しました。初心者はMySQLについてあまり知らないと思うので、まずはMySQLを含むRDBMSについて全体像を掴んでもらったほうが、この次の用語を正しく理解するための助けになると思い、最初に選ばせてもらいました。「データベース、テーブル、カラム、レコード」と言った用語も、SQL言語を説明する上で欠かせないものですので、1で学習してしまいます。1, 2のステップを踏むことで、データベース共通の概念がなんとなく理解できるレベルまで達していると思います。

次に、3 ~ 5のステップでMySQLについて詳しく知るという段階になります。環境構築、データ型などの基本知識を抑えます。最後に、「MySQLを使った実践的な開発をする」をいう前ステップよりも結構アバウトな内容となっていますが、これは実際にMySQLを使用するアプリケーションによって必要なもの、不必要なものが別れると考えたからです。6ステップ目に突入する頃には、トランザクション、日本語処理、ユーザー管理、レプリケーションなどは資料を読めばなんとなくわかるレベルと思いましたので、割愛させていただきました。

もう1つ最後にお伝えしたいことがあります。ステップで1 ~ 5について紹介しましたが、これを順序良く攻略していけばバッチリというわけではありません。実際にはそれぞれを何度か繰り返すことで理解が深まり、MySQLを難なく使いこなせるようになります。

具体的には何をすればいい?

上に書いてある方法は、僕が実際にこうしたら初学者はこうしたらいいんじゃないか?と思われる方法を紹介しています。この方法が合わないと思う人もいるかもしれないが、勉強は人それぞれであるので、実際にはこれを参考にして、実践していただけると嬉しいです。

躓かないためには、今自分はどの分野を学んでいるのか、そして、その技術がどういうことに利用することが出来るのかをしっかりを認識しておくのが大事です。

例えば、僕の場合、「ブログリンクカード」について開発したいと冒頭に言いました。この場合「url」「favicon管理情報」「記事のタイトル」「記事の概要(120文字)」といった情報が必要です。もしデータ型について学習しているときは、この管理情報にどの型を当てはめるのかを考えながら学習すると、理解が深まります。

初学者の殆どは公式ドキュメントもしっかりと理解できない上、ネット上に大量に存在する記事の中から自分が理解できる記事を探すのは時間が掛かると思います。なので、初学者は何も考えずに以下でおすすめする記事を使って勉強をして欲しいと思います。サイトや書籍内にあるリンクも無視して、順番に見ていく のが一番学習効果が高いと思います。

MySQLを学習する上でつまずきやすいポイント

実は、MySQLにはちょっと癖があることで知られています。 MySQLのバージョン体型は、メージャーバージョン.マイナーバージョン.リリース番号 - 安定状況という形式で表されています。ですが、4.0->4.1なった時は内部の文字コード変換が変わったり、通信プロトコルが変わりました。5.6->5.7に変わった時も、操作方法やパスワードの管理方法など、影響範囲の大きい部分がちょこちょこ変わったりしています。

僕の場合、MySQLのバージョンをあまり気に留めないまま、ネットや書店でMySQLについて学んでいたため、実機で試した時に「これ、うごかないやん!」みたいなことがちょくちょくありました。5.6以前か5.7以降かは特に気をつけて学習しましょう。

5.6以前と5.7以降でどこが変わったのかの情報が沢山出てくるのですが、どれも似たような内容しか書いていないことが多く、良くまとめられた資料を探すのは苦労しました。個人的にこの資料がとても役に立ちました。

1.MySQLなどのRDBMSの役割を知る

まずは、RDBMSについての概要を学んでしまいましょう。

MySQLは、とっても知れたオープンソースのRDBMS(リレーショナルデータベースマネジメントシステム)です。 RDBMSにはいろいろ種類があって、「postgresql」や「Microsoft SQL Server」もRDBMSの仲間です。

個人的には、このサイトが非常に参考になりました。すでにMySQLのことを知っている人でも、「ああ、そうだったのか!」と思わせてくれる内容も含まれています(僕がそうだった)。

2.SQL言語について知る

SQL言語について学習する方法はたくさんありますが、僕の実践した方法は「ドットインストールのMySQL講義ビデオを見る」と「本を見てSQL言語の問題集を解く方法」の2つです。

この2つどちらもSQLを知るということでは同じですが、目的が異なります。「ドットインストールのMySQL講義ビデオを見る」をすることにより、MySQLについてSQL言語の全体像をつかむことが出きます。そして、「本を見てSQL言語の問題集を解く」ことにより、具体的にSQL言語についての知識をみにつけることが出きます。

ドットインストールのMySQL講義ビデオを見て実機で実践する方法

このビデオを見ることにより、MySQLのSQL言語に対する全体像をつかむことが出きます。 ビデオは#01 ~ #17まで見れば十分だと思います。

本を見てSQL言語の問題集を解く方法

本を見て、SQL言語の問題を解くことによって、SQLの組み方、構造などを理解することが出きます。 本書にも書いてありますが、「英語だって数学だって、書きながら覚えた」。それと同じ感覚です。 僕の場合、この本を使ったらとても覚えやすかったです。

3.MySQLの概要と環境構築について知る

MySQLの概要を知るには、よくまとめられた本を1冊買って、それを読むのがいいと思います。ネットの記事でも有用なものもたくさんありますが、どこか抜けていたり、説明がリンクされていて他の記事に飛んだり、2重で同じ内容を読んだりと、案外無駄が多いいためです。

MySQLに関する書籍は複数ありますが、僕も場合昔の古いMySQLについても知っておいたほうがいいと思いました。MySQLの現在主流のバージョンは5.7ですが、それ以前の情報の有益な情報もたくさん転がっているため、概要ぐらいは知ってて損はないだろう、という判断です。

オススメの本はこれです。

この本、実は初版が2006年で、それから改訂版出ていません(2016年8月28日現在)。この頃のMySQLのバージョンは5.0が登場して半年ぐらい立った時です。それから、いろいろな変化やバージョンアップがあったため、コマンド指定が変わっている箇所が多々あります。

それでも、この本をすすめるのは、本当によくまとめられた概要と実践的な内容が詰まっているからです。SQL言語がどうのこうのなんてメインで書かれておらず、考え方、理解、実践に重点をおいた内容となっているからです。この本のようにアプローチが大変いい本はまだ見たことがありません。

でも、先程も言ったように今のバージョンに追いついていません。それはこの本で補うといいです。

4.MySQLのデータ型と独自の構文について知る

MySQLには下記のようにたくさんの型があります。多分、歴史的な経緯からこんなにあるんだと思うですけれど、初心者の人って、どの型を使えばいいかわかりませんよね。大体は「int」「float」「varchar」「datetime」「timestamp」で対応出来ます。開発するものによっては、適宜型を変える必要性はあると思いますが、それはそれぞれで適用して下さい。

説明 指定形式 別名
tinyint 8bit整数。 tinyint(n) [unsigned] [zerofill]
smallint 16bit整数。 smallint(n) [unsigned] [zerofill]
mediumint 24bit整数。 mediumint(n) [unsigned] [zerofill]
int 32bit整数。 int(n) [unsigned] [zerofill] integer
bigint 64bit整数。 bigint(n) [unsigned] [zerofill]
decimal パック10進数。 decimal(n, d) [zerofill] dec,numeric
float 浮動小数点数。4または8バイト。 tinyint(n) [zerofill]
double 浮動小数点数。 double(n) [zerofill]
double precision 倍精度浮動小数点数。 double precision(n) [zerofill] real
char 固定長文字列型。 char(n) [binary]
varchar 可変長文字列型。 varchar(n) [binary]
tinytext 可変長文字列型。255バイト以下。 tinytext
text 可変長文字列型。65535バイト以下。 text
mediumtext 可変長文字列型。1677215バイト以下。 mediumtext
longtext 可変長文字列型。4294967295バイト以下。 longtext
date 日付型。 date
datetime 日付時刻型。 datetime
timestamp 日付時刻型n桁。 timestamp(n)
time 時刻型。 time
year 年。2または4桁。 year(n)
tinyblob 8bit整数。 tinyblob
blob 8bit整数。 blob
mediumblob 8bit整数。 mediumblob
longblob 8bit整数。 longblob
enum 列挙型。 enum(‘文字列1’,文字列2”,…)
set 文字列セット型。 set(‘文字列1’,文字列2”,…)

※ 引用: http://www.k-cube.co.jp/wakaba/server/mysql_type.html

また、これを学習するときにもこの本が役に立ちます。

5.MySQLを使った実践的な開発をする(トランザクション、日本語処理、ユーザー管理、レプリケーションなどを含む)

最後の仕上げは、MySQLを使った何かのアプリケーションを自分で作りましょう。 そんな暇はないよ!という人は、設計をして見るだけでもかなりいいと思います。 2つのデータベースをレプリケーションして、ここでバックアップをして、このカラムの型をvarcharにして…みたいなことを考えるだけでもだいぶ違うと思います。

会社に務めている人なら、「自分がいつも使っているシステムを自分が作るとすればどのような設計にするか」 とか考えるのはどうでしょうか?

そこで、一番大事なデータは何か。それを守るにはどういう構成にすればいいか?などを考えると自ずと、 どういう構成が望ましいか、わかってくるはずです。そうすることで、実践的で使える知識が身につきます。

まとめ

今回、いかにつまずくこと無く、運用できるレベルまで持っていけるか考えをアウトプットとしてまとめました。もっといい勉強法を知っているぞ!という人がいれば、是非初学者に共有していただきたいです。