対象読者
- C++で便利ないい感じのライブラリを探したい!
- でも日本語記事で紹介されているライブラリでは合わない
- 沢山の中から選びたい!
C++で楽できる便利なライブラリが知られていない問題。
C++は標準ライブラリが優秀で、基本的な実装には困りませんが、
なんでも自分で作ろうとして、沼にハマり……
という経験はありませんか?
また、大規模なフレームワークにどっぷり浸っていて、MakefileやCmake、面倒な初期化
のせいで時間浪費してませんか?
Googleで検索しようにも、C++つよつよStackOverflow回答者のレスで初心者には???
ということも…
PythonやC#と同様に便利でシンプルなライブラリって結構あるんですよ!
どんなライブラリがあるか知らない、
選択肢を検討してから選びたい!
などのお悩みを解決できる便利なサイトがあります。
ライブラリを探す方法
Google検索
Googleで検索するのは最も手っ取り早いでしょう。
C++言語のライブラリは、日本語でヒットすることは少ないです。
一方で、英語で検索するとある程度はヒットするでしょう。
C++言語においては、良くも悪くも枯れた技術のライブラリがヒットしやすいです。
ライブラリによっては後述するGitHubでの公開がなく、ホームページでのみ公開されている場合もあります。
GitHubで検索
OSSのライブラリを探す際は、最も有力な検索方法です。
詳細な条件で検索できるためオススメです。
一方で、ライブラリを運用する上での知見を知るのは少し難しいでしょう。
現在使用しているライブラリを明確な目的をもって置き換える際にも有力な検索方法となるでしょう。
(速度を向上したい、XXXに不満がある等)
GitHubにてライブラリの情報がまとめられているページを見る。
以下で解説します。
Awesome C++でライブラリを探す
awesome cpp 直訳で素晴らしいC +という意味。
C++でいい感じのライブラリがまとめて掲載されています。
GithubのREADME.mdを使って書かれています。
Github上にあるため、プルリクエストもどしどし出されて、追加されていっています。
特にGitHubから入手できるライブラリが多いです。
何がいいの?
以下の理由でおすすめしています。
- とにかく掲載量が多い
- 日本語情報だと知ることが一切ないライブラリも多数
一方でデメリット
- 日本語情報がない
- 採用例が少ない場合が多い。
そのまんまですね、情報として沢山のライブラリを知れるのがメリットです。
採用例が少ない場合が多いです。
ただGitHubのスターは採用例の割に沢山ついていたりします。
これから流行る未来の原石を発掘できるかもしれませんね。
1000以上のスターがあっても、
日本語記事0件とか、結構あります。
(前提) C++でのライブラリ導入方法
ビルドしたオブジェクトファイルをリンクする
まずはGitHubからソースコードをクローンします。
各コンパイラごとのビルドプロジェクトを開きます。ここではVisualstudioを想定します。
.slnファイルを開き、Debug/Releaseの両方をビルドします。
導入したいプロジェクトに静的リンク、または動的リンクします。
IDEのために、ヘッダーファイルの場所を教え、intellisenseを使えるようにします。
なおライブラリによってはすでにビルドされたものが配布されている場合もあります。
この場合は静的リンク、または動的リンクする所から設定します。
ヘッダーオンリー、シングルヘッダーライブラリ
C/C++におけるヘッダー(.h)ファイルのみで構成されたライブラリです。
この方式のライブラリを導入する最も手っ取り早い方法は、導入したいプロジェクトのソースに直接入れてしまうことです。
これにより直接ライブラリを使用することができます。
しかしコンパイルするソースコードの量が増えるため、ビルドサイズ、ビルド時間が伸びます。
NuGet
元々は.Net Frameworkに対応したパッケージマネージャーでした。
C++のライブラリも導入することが可能です。
VisualStudioに付属しているため、Ideの画面から操作することができます。
vcpkg
Microsoft社製のC++に対応したパッケージマネージャーです。
VisualStudio以外のCmake等の環境でも導入することが可能です。
もちろんVisualStudioにも付属しています。
Awosome C++に掲載されているライブラリたちを紹介
ゲームエンジン
Godot
OSSゲームエンジンの中では、最近かなり話題です。
特に2Dが強いことで有名でしたが、3Dも結構イケてます。
スクリプトがpython風なこともGOOD
o3de
Amazonのゲームエンジン、Lumberyardがベースです。
Lumberyard自体が、CryEngineに影響を受けているので、
わりとグラフィックも力が入っています。
Panda3D
Pythonで3Dゲームを作れてしまうライブラリ
コアはC++で作れています。
圧縮
PicoJSON
シンプルイズベストなJSONライブラリです。
意外と有名かも
JSONのライブラリは結構種類があります。
それぞれパフォーマンスもかなり違うこともあるので、
大規模に使う際はベンチマークしたほうが良さげですね。
とにかくシンプルがいい人に結構オススメです。
ソースも見やすいですしね。
Awesomeシリーズ
Awesome XXX というGithubリポジトリは他の言語やサービスでもあります。
基本的には Awesome ‘製品名’ github 等で検索するとヒットするかと思います。
Awesome Rust
Awesome AWS
こんなのもあります。
“Self Hosted” オンプレで使えるサービス、アプリ一覧
Awesomeシリーズ自体をまとめたページ
Awesome XXX ページを更にをまとめたページがあります。
言うなれば Awesome Awesome ですね。
とても参考になりますし、ただ見てても面白いですよ。
Awesomeなんちゃら をまとめたAwesomeも結構数があります。
AwesomeのAwesomeのAwesomeが必要になる日も近い…
GitHubで情報をシェアするという事
GitHubではリポジトリにアクセスすると、README.mdが大きく表示されます。
このページに便利で役に立つ情報を書いていこう、というリポジトリが沢山あります。
さらにGitHubで公開するということは、プルリクエスト等で他のユーザーからも
情報を追加したり、編集したりできます。
またGitHub Pagesという機能を用いれば、MarkdownをHTMLに変換し
見た目をいい感じにした上で、.github.io
/repoというドメインで公開できるため
非常に有用です。
ぜひまだ世界に存在しない情報をシェアしたい時には活用してみてください!
コメント