【プログラミング基礎】ライブラリ・フレームワークって何?
こんにちは!
SE・プログラマーとして仕事するようになると間違えなく触れる単語に「ライブラリ」や「フレームワーク」といったものがあります。
特に1年目で聞くと「よく聞くけどわからない」だったり「なんとなく知ってるけど説明はできない・・」みたいなもやもやした感じになりがち(だと思っています)。
そこで今回はより簡潔に覚えて簡潔に説明できるようにまとめてみます!
アルゴリズム
まず、表題の話に入る前に「アルゴリズム」についても、同じようにあやふやな感じになりがちなので説明をしておきます。
アルゴリズムというのはいわば、手順のことです。
もう少し砕いて書くと、「これして、これして、こうする」という1連の流れをアルゴリズムと呼びます。
例えば、
細かいことを言うと、括弧の計算の中でも掛け算・割り算を優先したりなどはありますが、
この一連の手順のことをアルゴリズムと呼びます。
この手順を行うことで「3+1×10÷2=8」という結果を手に入れることができます。
関数
アルゴリズムを説明し、そして本題のライブラリを説明するためには、「関数」という単語も必要不可欠です。
関数とは、プログラムとしてアルゴリズムを書いたときに、どんな値がきても処理できるよう汎用的にしたものです。
数学的に表すと、「3+1×10÷2」は「x+y×a÷b」です。x、y、a、bがそれぞれどんな値であろうと四則演算のルールは変わりません。
したがってこのアルゴリズムはどんな値であれ同じものが利用できるわけです。
このように、値自体は定義せずどう処理するかだけを先に定義して、具体的な値は後から渡すことで処理をするものを関数と呼びます。
数字を例としていましたが、値が文字でも同様でです。
・お客さんのメールアドレス一覧から「gmail」の人を見つけたい。
という処理と
・お客さんの住所一覧から「東京都」の人を見つけたい。
という処理で考えると、アルゴリズムとしてはどちらも、一覧の中から特定の文字に当てはまる人を見つけるというものです。
これを関数化することで、一覧と探したい文字を渡してあげれば、わざわざメールアドレスと住所で別の処理を定義することなく汎用的に使えます。
ライブラリ
さて、ここからはタイトルにもあるライブラリについてですが、ここはとても簡単です。
ライブラリとは、機能ごとに関数をひとまとめにしたものです。
例えば、様々な計算を行うための関数をいくつか作成したとします。
・単純な四則演算を行う関数
・確率を求める関数
・近似値を求める関数
これらは全て計算を行う関数ですので、1つの「計算」フォルダにまとめててしまおうというのがライブラリです。
そもそも関数は汎用性を持たせるものなので、1度ライブラリにまとめてしまえば、
たとえプロジェクトが変わったとしてもこのライブラリを使うことで、新たに同じ関数を作成することなく利用できるというわけです。
世の中の誰かがライブラリ作ってネット公開をしてくれることで、難しい処理を作ることなく導入できるなど
ライブラリを使うことで、プログラミングが楽になります。
フレームワーク
最後になりましたがフレームワークです。
「枠組み」と訳すことができますが、これはシステムを作るための枠組みのことを指し、
この枠組みを1から作ることはとても大変なので、ほとんどの場合あらかじめ用意されたものを使用します。
土台は既製品を使い、必要なものを後から追加していくようなイメージです。
この枠組みの中にはここまで説明してきた、アルゴリズム・関数そして外部から提供されているライブラリがひとまとめになっています。
システムを作成する際に利用するのはプログラミング言語ですが、それぞれに得意不得意なことがあります。
その特色を理解したうえで、作りたいシステムに合わせて土台選びをすることで、
必要な機能だけ足せばシステム構築できるよう提供されているものがフレームワークというわけです。
「土台」ですので、完全に新規のプロジェクトでない限り選定をすることはないですが、
使われているフレームワークを調べ活用することで、これもまたプログラミングが楽になります。
まとめ
アルゴリズム、関数、ライブラリ、フレームワークと紹介してきましたが、システム構成として全体を見ると、
土台としてフレームワークがあり、そこには既存の関数やライブラリが存在していて、
それでも足りないもの自身で作成したりライブラリ導入していくような形になります。
実際のフレームワークやライブラリは無数にありますが、よく使う有名なものももちろんありますので、
私の得意な言語でよく使われるものは、また別記事で紹介したいなと思います。
まずは、それぞれの用語について理解し簡単に説明できるようにしておくことが大事ですので、
この記事で覚えていただけたらよいなと思います。