ライブラリー
「ライブラリー」の意味・「ライブラリー」とは
「ライブラリー」とは、一般的には書物や資料が収集・整理され、利用者が閲覧・利用できる施設のことを指す。また、コンピュータの分野では、プログラムの再利用可能な部品や機能をまとめたものを指すこともある。書物や資料のライブラリーは、知識や情報の共有・普及を目的として設立され、多くの場合、公共図書館や大学図書館などとして運営される。「ライブラリー」の語源
「ライブラリー」の語源は、ラテン語の「liber(書物)」と英語の「library(図書館)」が組み合わさった言葉である。英語の「library」は、古代ローマ時代において書物を保管・管理する場所を指していた。その後、英語圏の国々で図書館という意味で広く使われるようになり、日本でもそのままの形で「ライブラリー」として定着した。「ライブラリー」に関連する用語・知識
「ライブラリー」の英語表現
「ライブラリー」の英語表現は「library」である。また、コンピュータの分野においては、プログラムの再利用可能な部品や機能をまとめたものを指す場合も「library」と表現される。スマホにおける「ライブラリー」
スマートフォン(スマホ)においての「ライブラリー」は、アプリケーション内で音楽や画像、動画などのデータが整理・保存されている場所を指すことが多い。例えば、音楽アプリのライブラリーには、ダウンロードした楽曲やプレイリストが保存されている。「ライブラリー」に保存とは
「ライブラリー」に保存とは、データや情報をライブラリーに格納することを意味する。例えば、インターネット上で見つけた興味深い記事を、後で読み返すためにブックマークアプリのライブラリーに保存することが挙げられる。「ライブラリー」の言い換え
「ライブラリー」の言い換えとしては、「図書館」や「資料室」がある。これらの言葉も、書物や資料が収集・整理され、利用者が閲覧・利用できる施設を指す。「ライブラリ」の略語
「ライブラリ」の略語としては、「lib」という表現がある。特にコンピュータの分野では、プログラムの再利用可能な部品や機能をまとめたものを指す場合に「lib」という略語が用いられることが多い。「ライブラリー」を用いた例文
1. 彼は毎週土曜日に近くのライブラリーで本を借りてくる。 2. このアプリのライブラリーには、私が保存したすべての画像が表示されている。 3. プログラムの実行速度を向上させるために、高速な数学ライブラリを使用することが推奨される。library
「library」とは・「library」の意味
「library」とは、英語で図書館を意味する言葉である。複数形は「libraries」であり、日本語では「図書館」と訳される。図書館は、書籍や資料を収集・整理し、利用者が閲覧・利用できるように提供する施設である。「library」の発音・読み方
「library」の発音は、IPA表記でアメリカ英語では/lάɪbreri/、イギリス英語では/lάɪbrəri/となる。アクセントは第一音節の「li」に置かれる。日本語では一般的に「ライブラリ」と読む。「library」の語源・由来
「library」の語源は、ラテン語の「liber」(本)と、古代ギリシャ語の「biblion」(紙・巻物)に由来する。これらの言葉が組み合わさって、「本を収集・保管する場所」という意味を持つようになった。「library」の類語
「library」の類語には、「bookstore」(書店)、「archive」(アーカイブ、記録保管所)、「repository」(貯蔵庫)などがある。それぞれ異なるニュアンスを持ち、用途や機能によって使い分けられる。「library」を含む用語・関連する用語
「libraryゲーム」とは
「libraryゲーム」とは、図書館を舞台にしたゲームのことである。プレイヤーは図書館員となり、本の整理や利用者へのサービスを行うことが目的となる。「z-library」とは
「z-library」とは、世界最大級の電子図書館の一つである。多くの書籍や記事が無料でダウンロードできることから、利用者にとって非常に便利なサービスとなっている。「from the library of」とは
「from the library of」とは、本の持ち主を示す表現である。書籍の扉や見返しに記載され、所有者が誰であるかを示す。「library」の使い方・例文
1. She goes to the library every weekend to study.(彼女は毎週末に図書館で勉強するために行く。) 2. The library has a vast collection of books on various subjects.(その図書館は様々な分野の本が豊富に揃っている。) 3. The new library building was designed by a famous architect.(新しい図書館の建物は有名な建築家によって設計された。) 4. The library offers free Wi-Fi access to its patrons.(その図書館では利用者に無料のWi-Fiアクセスが提供されている。) 5. The library is closed on Sundays and public holidays.(図書館は日曜日と祝日に閉まっている。) 6. The library has a special section for children's books.(その図書館には子ども向けの本の特別なセクションがある。) 7. The library often hosts events and workshops for the local community.(その図書館では地域社会向けのイベントやワークショップが頻繁に開催される。) 8. The library provides a quiet space for people to read and study.(図書館は人々が静かに読書や勉強ができる空間を提供している。) 9. The library has a large collection of digital resources, such as e-books and online databases.(その図書館は電子書籍やオンラインデータベースなどのデジタル資源が豊富に揃っている。) 10. The library offers a book reservation service for popular titles.(その図書館では人気のあるタイトルの予約サービスが提供されている。)ライブラリー【library】
ライブラリ
ライブラリ
プログラムでよく使われる機能モジュール群を切り出し、再利用しやすい形でまとめたもの。ライブラリを利用することで、定型的な処理を一から実装する手間を省いて、ソフトウェア開発を効率化できる。
プログラムからライブラリ中の機能モジュールを利用するには、一般にプログラムと機能モジュールを結び付ける「リンク」(link)という作業が必要である。この作業を実施するソフトウェアを「リンカ」(linker)と呼ぶ。
リンク作業に着目すると、ライブラリは2種類に大別できる。プログラムの実行コード作成時にリンクされ、実行コード内に組み込まれる「静的リンクライブラリ」と、実行コードには組み込まれず、プログラム実行時にリンクされる「動的リンクライブラリ」の2種類である。更新作業の容易さや、スペース効率の高さなどから、最近のOSでは動的リンクライブラリを中心に利用する場合が多い。
ライブラリ
Library
ライブラリー library
全体 ★★★☆ 60歳以上 ★★☆☆
- 図書以外を収蔵する施設に用いられることも多いが,指し示すものに応じて,「ビデオ図書館」などのように,収蔵する対象を明示するとよい。また,「図書館」が使いにくい場合は,「資料館」あるいは,収蔵する対象を「○○」に明示して,「○○資料館」などと言い換えるとよい。
- 収集したり閲覧に供したりする機能に着眼する場合は,「収蔵館」「閲覧所」と言い換えることもできる。
- 個人的な蔵書を収蔵する場所を指す場合は「書庫」,図書のシリーズを指す場合は「
叢書 」と言い換えられる。 - 「アーカイブ」が,記録や資料を長期に保存するためのものであるのに対して,「ライブラリー」は,図書をはじめとする資料を収集し閲覧に供するためのもの。対象物や目的に応じて言い換え語を工夫したい。
- 定着に向かっている語だと思われ,「ライブラリー」をそのまま用いることにさほど問題のない場面も多いと思われる。ただし60歳以上では,半数以上が分からない語であり,言い換えや説明付与が望まれる場合も多い。
ライブラリ
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2019年10月) |
ライブラリ(英: library)は、汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたものである。ライブラリと呼ぶときは、それ単体ではプログラムとして動作させることはできない、つまり実行ファイルではない場合がある。ライブラリは他のプログラムに何らかの機能を提供するコードの集まりと言える。ソースコードの場合と、オブジェクトコード、あるいは専用の形式を用いる場合とがある。たとえば、UNIXのライブラリはオブジェクトコードをarと呼ばれるアーカイブツール(アーカイバ)でひとまとめにして利用する。図書館(英: library)と同様にプログラム(算譜)の書庫であるので、索引方法が重要である。
オペレーティングシステム (OS) などの実行環境に実装された機能を、アプリケーションソフトウェア(アプリケーション、アプリ)から利用できるように定義されたものがAPIであり、一般的にソフトウェア開発キット (SDK) を通じて利用できるようになっているが、広義ではAPIとライブラリを同一視することもある[1]。プログラマが下位レベルのAPIやライブラリを直接駆使して定型的なコードを書くことなく、比較的簡単にアプリケーションを構築することができるように、SDKには上位レベルのアプリケーションフレームワークが含まれていることもある。このようなソフトウェアフレームワークもライブラリの一種である。
また、ソフトウェア以外の再利用可能なものの集合について使われることもある(音声データなど)。
動的リンク
動的リンク (英: dynamic linking) は、あるライブラリ内のデータ(コードを含む)を新たな実行ファイルのビルド時にコピーすることはなく、ディスク上に別のファイルとして存在している。ビルド時にリンカ(リンケージエディタ)が行うのは、その実行ファイルが必要とするのがどのライブラリのどの部分であるか(関数名やインデックス)を記録するだけである。リンク作業の大部分はそのアプリケーションがメインメモリ上にロードされたときか、実行時である。リンクを行うプログラムコードはローダ(英: loader)と呼ばれ、実際にはOSの一部と見なされる。適当な時点でローダは必要なライブラリをディスク上で見つけてプロセスのメモリ空間に(追加のデータ空間と共に)マッピングする。OSによってはプロセスが実行開始する前でないとライブラリをリンクできないものもあるが、多くのOSではプロセス実行時に実際にライブラリを参照したときにリンクできる。後者は「遅延読み込み」などと呼ばれる。どちらの場合もライブラリは動的リンクライブラリ(ダイナミックリンクライブラリ)と呼ばれる。Windows環境では動的リンクライブラリの略称でもある「DLL」という呼び方が一般的であり、動的ライブラリのファイル拡張子は通例 .dll である[2]。動的リンクライブラリの中でも、システム上の複数の実行プログラムによって共有・再利用されうるものを、共有ライブラリ(シェアードライブラリ)と呼ぶ。Windows APIの大半はシステムDLLにC言語形式の関数あるいはCOMコンポーネントの形で実装・公開されており、あらゆるWindowsアプリケーションから利用できる共有ライブラリでもある。
ローダの処理は、メモリ上の各ライブラリの位置が実際にロードされるまで確定しないため、ちょっとしたトリックを必要とする。ディスク上のファイル内に絶対アドレスを書きこんでおくことはDLL内であっても不可能である。理論的にはメモリにロードされたときにライブラリを参照している部分を全て書き換えて正しいメモリ上の位置を参照するようにすることはできるが、それによって消費される時間とメモリは無視できない。その代わりに多くの動的リンクシステムではアドレス欄が空欄となったシンボルテーブルをコンパイル時に用意する。ライブラリへの参照は全てこのシンボルテーブルを経由して行われる(コンパイラはシンボルテーブルからアドレスを取り出して使うコードを生成する)。メモリにロードされたとき、ローダがこのテーブルを書き換える。
ライブラリも全メソッド(関数、サブルーチン)のテーブルを持っている。ライブラリに入ってくるときは、このテーブルを経由して各ルーチンにジャンプする。これによってライブラリのルーチンコールにオーバーヘッドが発生するが、通例それは無視できるほど小さい。
動的リンカ・ローダは機能面で様々なものがある。いくつかの場合、実行ファイルに格納された明示的なライブラリパスに依存し、ライブラリ名やディスク上の配置を変更するとシステムが作動できなくなる。より一般的な手法としてはライブラリ名だけを実行ファイルに格納し、OSが何らかのアルゴリズムでディスク上のライブラリを検索する。Unix系システムでは、ライブラリを探す場所(ディレクトリ)を構成ファイルにリストアップしておく。ライブラリ開発者はそこに書かれたディレクトリにライブラリを配置することを推奨される。しかし、この方法では新しいライブラリをインストールする際に問題が発生しやすく、共通のディレクトリにあまりにも多くのライブラリが置かれることとなって管理を難しくする。Windowsではレジストリを使ってCOMコンポーネントやActiveX DLLの場所を決めているが、標準DLLでは、
- アプリケーションの実行ファイルの存在するディレクトリ
SetDllDirectory()
で指定されるディレクトリ(Windows XP SP1以降でサポート)- システムディレクトリ (NT系ではSystem32)
- 16ビットシステムディレクトリ (System)
- Windowsディレクトリ
- カレントディレクトリ
- PATH環境変数
で示されるディレクトリを探す(古いバージョンではカレントディレクトリが2番目だった)[3]。OPENSTEPはもっと柔軟なシステムを使用していて、ライブラリの探索リストを保持している。しかし不正なDLLが探索の上位に置かれていると実行ファイルは不正動作する可能性がある。Windowsではこれが「DLL地獄」(英: DLL hell)と呼ばれ、よく知られている問題である。
Windows XPからはSide-by-Sideアセンブリ(DLL署名、WinSxS)というメカニズムが追加された。これは動的リンク時にライブラリのファイル名ではなく、ライブラリにつけられた署名によってリンクすべきライブラリを決定するものである。これにより、同じファイル名を持つが異なる実装を持つライブラリを同時に使い分けることができる。よくあるパターンとして、ソースコードから改変・ビルドされたランタイムライブラリをシステムにインストールする場合にこのメカニズムが有効に働く。システムにインストールされたライブラリはライブラリ探索リスト上比較的上位に存在するが、署名が一致するプログラムにのみロードされるのでDLL地獄は今後解消されるであろうと考えられる。しかし、この機構には一つの弱点がある。それはシステムライブラリをオーバーライドして独自機能を実装する時、この機構は役に立たない方向へ働く。その様な実装をする時には、故意にマニフェスト機能を無効にしてライブラリを作らなくてはならない。もっとも、そのようなアプローチは、システムファイル保護機能が搭載されたWindows 2000のリリース時点で時代遅れであり、Windows Vistaに至っては管理者と言えどもシステムライブラリを書き換える事はできなくなっている。
動的ライブラリの起源は定かではないが、少なくとも1960年代後半のMTS (Michigan Terminal System) まで遡ることができる ("A History of MTS", Information Technology Digest, Vol. 5, No. 5)。
動的読み込み
動的読み込み (英: dynamic loading) は動的リンクの下位カテゴリであり、ビルド時にリンク(暗黙的リンク、英: implicit linking)されたもの以外のダイナミックリンクライブラリを、実行中のプログラムが明示的にロードすることである。明示的リンク (英: explicit linking) と呼ばれることもある[4]。この場合、ライブラリはプラグインモジュールとして使われるのが一般的で、表計算プログラムのアドイン(add-in)などが典型的である。
動的ライブラリをサポートしているシステムは、モジュールの動的読み込みAPIもサポートしているのが一般的である。例えばWindowsではLoadLibrary()
とGetProcAddress()
が用意されていて、Unix系システムではdlopen()
とdlsym()
が用意されている。いくつかの開発環境ではこの処理を自動化している。逆に、不要になったモジュールを解放(アンロード)するAPI(FreeLibrary()
やdlclose()
)も用意されている。これらのAPIは、特にユーザーによる機能拡張を可能とするプラグインシステムをアプリケーション内に実装することにも役立つ。
.NET Frameworkでは、ライブラリのアセンブリは必要となったタイミングで動的かつ自動的にロードされる遅延読み込みが基本であるが、アセンブリの明示的なアンロードはできない。P/Invokeも同様である。.NET 4以降ではプラグインシステムの実装を容易にするManaged Extensibility Frameworkがサポートされるようになった。
スクリプト言語(動的プログラミング言語)の処理系(インタプリタなど)をアプリケーションに組み込んで、定型処理の自動化や機能拡張のためにユーザーが記述したプログラムを実行できるようにしているものもある。Microsoft OfficeのVisual Basic for Applicationsが代表的な例だが、Maya 8.5以降[5]やLightWave 11以降[6]のように、独自のスクリプト言語以外に汎用プログラミング言語Pythonによるスクリプティング機能を搭載するケースも増えている。これらは外部のユーザーコードを広義の動的ライブラリとして活用するプラグイン機能ともいえる。
リモートライブラリ
もうひとつのライブラリの形態として完全に分離された実行ファイルを遠隔手続き呼出し (RPC) と呼ばれる方法で接続するものがある。このアプローチではOSの再利用が最大に生かされる。つまり、ライブラリサポートのためのコードはアプリケーションサポートのコードやセキュリティサポートのコードと共通化できる。さらに、このライブラリはネットワークを経由した別のマシン上に存在しても構わない。
欠点はライブラリコールの度に無視できないオーバーヘッドが発生することである。RPCは非常にコストがかかり、可能な限り排除されてきた。しかし、このアプローチは特定分野で一般化しつつある。特にクライアントサーバシステムやEnterprise JavaBeansのようなアプリケーションサーバで一般的である。
共有ライブラリ
動的か静的かとは別に、ライブラリはプログラム間で共有される方式でも分類される。動的ライブラリは何らかの共有をサポートしており、複数のプログラムが同時に同じライブラリを使用することができる。静的ライブラリは各プログラムにリンクされるため、共有することはできない。
共有ライブラリ(英: shared library)はやや曖昧な用語であり、ふたつの概念を含む。第一はディスク上のコードを複数の無関係なプログラムが共有することを意味する。第二の概念はメモリ上のコードの共有であり、ライブラリのロードされた物理メモリページが複数のプロセスのアドレス空間にマップされ、同時にアクセスされることを意味する。一般に後者を共有ライブラリと称するのが推奨され[要出典]、この方式には様々な利点がある。例えばOPENSTEPでは、アプリケーションの多くは数百Kバイトで即座にロード可能であり、その機能の大部分はライブラリ上に実装されていて、共有可能であるためにOSが別のプログラム用にメモリにロードしたコードイメージがそのまま使用できる。しかし、マルチタスク環境で共有されるコードは特別な配慮が必要であり、そのために性能が若干低下する。
メモリ上の共有ライブラリはUNIXでは位置独立コード (PIC) を使って実現される。これは柔軟なアーキテクチャだが複雑であり、Windowsなどでは使われていない。Windowsなどは、DLL毎にマップすべきアドレスを事前に決めておくなどしてメモリ上で共有可能にしている。WindowsのDLLはUNIXから見れば共有ライブラリではない[7]。
最近[いつ?]のOSでは共有ライブラリは通常の実行ファイルと同じ形式になっている。これにはふたつの利点がある。第一はひとつのローダで両方をロードできる。それによってローダが若干複雑化するが、十分コストに見合う程度である。第二はシンボルテーブルさえあれば実行ファイルを共有ライブラリとして使うことができる点である。このようなファイル形式として、ELF (UNIX) と PE (Windows) がある。また、Windowsではフォントなどのリソースも同じファイル形式になっている。OPENSTEPでもほとんど全てのシステムリソースが同じファイル形式になっている。
DLLという用語はWindowsやOS/2で主に使われる。UNIXでは「共有ライブラリ」が一般的である。
マルチスレッド環境下でライブラリを使用するにあたっては、別の共有問題が発生する。ライブラリルーチンがデータ領域としてスタックのみを使う場合は問題ないが、ライブラリ内のデータ領域を使う場合、そのデータ領域がスレッド毎に用意されていないことが多い。したがって、そのようなライブラリルーチンを使う場合、実行ファイル側で同時に複数のスレッドが同じライブラリルーチンを使わないように注意しなければならないことがある。
オブジェクトライブラリ
1980年代終盤に開発された動的リンクは1990年代初期にはほとんどのOSで使用可能となった。ほぼ同時期にオブジェクト指向プログラミング (OOP) が市場に出回り始めた。OOPは従来のライブラリが提供していなかった情報を必要とした。それは、あるオブジェクトが依存しているオブジェクトのリストである。これはOOPの継承という機能の副作用であり、あるメソッドの完全な定義は複数の場所に分散して配置される可能性がある。これは単純化すればライブラリ間の依存関係ということになるが、真のOOPシステムではコンパイル時には依存関係が明らかでなく、そのために様々な解決方法が登場した。
同じころ、多層構造のシステムの考え方も出てきた。デスクトップコンピュータ上の表示プログラムが汎用コンピュータ(汎用機)やミニコンピュータの記憶装置や演算機能を利用するものである。例えばGUIベースのコンピュータがミニコンピュータにメッセージを送り、表示すべき膨大なデータの一部を得るというものが考えられた。RPCは既に使われていたが、それは標準化されていなかった。
主要な汎用機およびミニコンメーカーがこれら二つの問題に関してプロジェクトを結成し、どこでも使えるOOPライブラリ形式を開発した。このようなシステムをオブジェクト・ライブラリ(英: object library)と呼んだり、リモートアクセスが可能ならば分散オブジェクト(英: distributed objects)と呼ぶ。マイクロソフトのCOMは分散機能のないオブジェクトライブラリであり、DCOMはリモートアクセスを可能としたバージョンである。
一時期、オブジェクトライブラリはプログラミングの世界の「次の大きな出来事」とされた。様々なシステムが開発され競争も激化した。例をあげると、IBMのSOM/DSOM、サン・マイクロシステムズのDOE、NeXTのPDO、DECの ObjectBroker、マイクロソフトのComponent Object Model (COM/DCOM)、そして様々なCORBAベースのシステムがある。
結局、OOPライブラリは次の大きな出来事ではなかった。マイクロソフトのCOMとNeXT(現在はApple)のPDO以外は、ほとんど使われることも無くなったのである。
Javaではオブジェクトライブラリとして主にJARが使われている。その中には(圧縮された)クラスのバイトコード形式が格納されていて、Java仮想マシンや特殊なクラスローダーがそれをロードする。なお、Java Native Interface (JNI) では、C/C++などのネイティブコードで一定のルールに従って記述された関数を、Javaのメソッドとして呼び出すことができるが、コードが実装されたライブラリモジュールをSystem.loadLibrary()
で明示的に動的ロードしておく必要がある。
命名規則
ライブラリのファイル名は常に接頭辞lib
で始まり、拡張子として.a
(静的ライブラリ)あるいは.so
(ダイナミックリンクライブラリ)が使用される。オプションとして多重拡張子によるインタフェース番号が付与される場合がある。例えば、libfoo.so.2
はlibfoo
ライブラリの二番目のメジャーなインタフェース番号の付いたダイナミックリンクライブラリである。古いUNIXではマイナー番号も使っている場合がある (libfoo.so.1.2
) が、最近[いつ?]のUNIXではメジャー番号しか使っていない。ライブラリのうち、共有ライブラリは/lib
、/usr/lib
、/usr/local/lib
などのディレクトリに置かれる。動的にロードされたライブラリは/usr/libexec
などのディレクトリに置かれる。ライブラリのディレクトリにある .la
ファイルは libtool アーカイブである。
ライブラリの命名規則はBSDを踏襲していて、動的ライブラリの拡張子には.dylib
が使われるが、代わりに.so
を使うこともできる。しかし、多くの動的ライブラリは「バンドル(英: bundles)」と呼ばれる特別な場所(パッケージ)に置かれ、ライブラリに関連するファイルやメタデータもそこに置かれる。例えば、"My Neat Library" というライブラリは "My Neat Library.framework" というバンドルに実装される。
Windowsではライブラリのファイル名に対する厳格な命名規則はないが、いくつかの拡張子が用意されている。C言語/C++では.lib
という拡張子を持つファイルがビルド時にリンカによって使用されるが、これには2つの種類がある。ひとつは静的ライブラリで、もうひとつはDLLのインポートライブラリである。ダイナミックリンクライブラリには通例.dll
という拡張子が付けられる。インタフェースのリビジョンはファイル内にリソースとして書きこまれるか、COMインタフェースを使って抽象化される。また、.NET Frameworkのアセンブリについては、内部のマニフェストに記述される。
脚注
- ^ API, SDK, Libraryの違い | DAFTCRAFT ENGINEER BLOG | ダフトクラフト株式会社
- ^ LightWaveプラグインの .p やActiveXの .ocx など、アプリケーションやフレームワークによっては別の拡張子が使われることもある。
- ^ “Dynamic-Link Library Search Order” (英語). MSDNライブラリ (2008年11月6日). 2008年11月11日閲覧。
- ^ Link an executable to a DLL | Microsoft Docs
- ^ ASCII.jp:「無償体験版も提供する予定」──オートデスクが語る『Maya 8.5』
- ^ Python Scripting For LightWave | 2024
- ^ UNIXでもライブラリのマップすべきアドレスを決めている場合がある。ただしそれは性能向上目的であり、基本的にはPIC化されている。
関連項目
- IMSL - 数値計算・統計解析ライブラリ
- ソフトウェア工学
- 動的リンク
- 静的リンク
- アプリケーションフレームワーク
- アプリケーションプログラミングインタフェース
- ダイナミックリンクライブラリ(DLL)- Windowsの動的ライブラリ
- アセンブリ
- GNU Libtool
- 標準Cライブラリ
- 標準C++ライブラリ
- 基本クラスライブラリ
- Javaクラスライブラリ
- libraryのページへのリンク