読者です 読者をやめる 読者になる 読者になる

Happy My Life

日常とか技術とか

ライブラリ勉強法

Working in the Stacks

プログラミング言語の勉強法は何かと見かけるのだが、Webフレームワーク等のライブラリ勉強法はあまり見たことがない。

多くの言語に触れてくると、新言語等が開発されても大抵は既存言語と掛け離れている事は少なく、既存言語との差をちょっと勉強したら大抵は使えるようになる(brainf*ckみたいな、新感覚な言語もあるが)

その反面、プログラミング言語に付属してくるライブラリは構成がそれぞれ違っているいる場合がほとんど。同一言語で、複数のWebフレームワークがあるのもよくある事なので、プログラミング言語の文法をマスターするより、ライブラリを覚えて、使いこなす事の方がどちらかというと大変じゃないのかといつも思っている。

大昔のように、プログラミング言語の文法を先にマスターして、後は自作ライブラリを開発、それをベースにアプリケーションを、という事例は最近ほとんど聞かなくなった。今は、様々な既存ライブラリを駆使してアプリケーション等の開発を行う場合がほとんどではないだろうか。

開発効率を上げる為にもライブラリの勉強法を確立しておかないと、今後もライブラリの海に溺れていく事は明らかではないかと。でも、あまりライブラリの勉強法が解説されているのを見たことがない。

という事で、参考までに私のライブラリ勉強法を書いてみる。

コンセプトを完全に理解する

ライブラリを勉強すると言うと、最初にマニュアルの先頭から順番にクラス、メソッドを完全に覚えようとする事を連想する人も多いだろうが、この方法はかなりの割合で途中で挫折する。言うなれば辞書を最初から読むようなものだし。例えこれで全部マスターしたとしても、ライブラリの全ての機能を使用する事なんて有り得ない。

という事で、最初は、ライブラリのコンセプトを把握する事から始めている。

ライブラリというものは、規模の大小はあれ、ほとんどの場合は何かの機能(Webアプリが楽に作れるように、GUIアプリが簡単に作成できるように、WebアプリのAPIを楽に扱えるように、など)を実現する為に作成されている。そして、ライブラリのクラスやメソッドを設計するにあたって、コンセプトを持って設計されている場合も多い。

例えば、Ruby on RailsRubyで作成されたWebフレームワークであり、Ruby on Rails以前のWebフレームワークと異なり、「DRY(Don’t Repeat Yourself)」や「設定より規約」といったコンセプトに基いてライブラリが設計されている。

こういったの設計コンセプトを最初に知る事で、この後のクラスやメソッドの調査や理解がぐっと楽になる。個々のクラスを調べる際にも、全体像からクラスの役割を理解する事ができるので、頭にも残りやすくなり、根幹からマスターするので、今後のクラスの理解の助けになる。

ライブラリのコンセプトを理解した上でコーディングすると、最終的に非常にシンプルで分りやすいコードになるというメリットがある。もちろん、ライブラリのコンセプトを全く無視してアプリケーションを制作する事も可能なのだが、その場合、非常に分りにくく、汚いコードになりがち。これじゃ、ライブラリを利用するメリットが半減してしまう。

サンブルコードをすべて実行

ライブラリのクラスが書かれたリファレンスマニュアルを見ていると、だいたい何ができるかは検討はつく。ただ、文字だけで追っているのでは、その場では理解できるが、いざ開発を始めた時に「この機能を実現するには、どのクラスを使えばいいのだ?」と思いだす事がなかなか難しい。

その為にも、次はライブラリについてくるサンプルコードはすべて実行して動作を確認しておく

実際に動かす事で、その手順を手を動かして確認する事ができるし、特徴的な機能というのは、大抵サンプルとして実装されている。サンプルを動作させる事で何ができるかを簡単に把握でき、ビジュアルとしてライブラリの特徴が記憶することができる。

このビジュアルとして記憶されるという事が重要で。それを行うことで。

  • サンプルにあった、あの機能を実装したい
  • サンプルを探して、読む
  • ソースコードで該当する箇所のクラス、メソッドを調べる
  • 該当コードを参考に実装する

という流れで、調査から実装までを短かく済ませる事ができる。

サンプルコードを頼りに、開発を進める

ある程度理解したら何か一つアプリケーションを作成するのが理解しやすい。こうやって学習しているのは、何か作成したいアプリケーションがあるから、のはずなので、それの開発を進めてみる。

初めて使用するライブラリを使うときは、サンプルコードの一つを丸ごとコピーして、そこに付加していくのが間違いが少ない進め方。1からコードを書いて始めるとハマった時に抜け出しにくくなる。

リファレンスマニュアルを全て読む

仕上げとして、開発を進めて多少慣れてきた頃に、ライブラリのリファンレスマニュアル(クラスやメソッドを詳細に解説したマニュアル)を一通り全部読む

一通り読む目的は、何ができるのかを再度確認し、機能の再発見を促す為。この時、クラスやメソッドなどを完璧に覚える必要はない。表面的に把握する程度でよい。

実際に使用する段階になって「たしか、こんなこんな事ができるメソッドがあったよなー」と思い出して、そこから実際の使い方を調べる、そんな感じで十分。学校のテストじゃないんだし。よく使うものはそのうち覚える。

クラスやメソッドの機能を一通り調べていくと「こんな事ができるのか」とか「こんな事もできるのね、便利」とか「これと同じ機能、実装しちゃったよ orz」など、いろいろと新しい発見があり、より一層理解を深める事ができる。

ファンレスを一通り読むのは、定期的に行なう事をお勧めする。

逆に、クラスやメソッドを理解する事で、そのプログラミング言語の傾向というか癖みたいなものも見えてくるようになるので、よりよいコードが書けるようになってくる事も多い。

ここまで進めてきたら、そのライブラリはかなり使いこなせるようになっているはず。

まとめ

この流れを見てわかる通り、トップダウン方式(全体像を把握してから、徐々に詳細を調べ)でマスターしている。

必要に迫られてライブラリを勉強する事もあるが、サンプルが少ない、全体の説明がなくクラスライブラリの詳細の説明しかない場合だと、ボトムアップ方式に理解するようにしている。まずクラス名やメソッドをすべて把握した上で、クラス構成やメソッド構成から透けて見えるライブラリの哲学を理解する。

このようなボトムアップで理解する必要のあるライブラリは、あまりいいライブラリでない事も多いのだが。

今までライブラリの理解で四苦八苦していた方は、この方法を一度試してみてはいかがかと。