概要
情報技術の基礎として理解しておきたいソフトウェアのうち、ファイルシステム、開発支援ツール、言語処理ツール、最適化、OSS、ライセンスを整理する。
ソフトウェア分野では、プログラムを作る道具、実行する仕組み、公開・利用するルールを整理する。
開発現場で使うツールやOSSライセンスと結び付けると、単なる用語暗記になりにくい。
この記事の構成
- ファイルシステム
ファイルシステムとは、記憶装置に保存されたデータをファイルとしてディレクトリ管理する仕組みのこと。 - プログラミングツール
プログラミングツールの意味と要点を具体例から整理。 - 言語処理ツール
言語処理ツールとは、プログラム言語を実行する際に必要となる機能を指し、次の種類がある。 - コンパイラ最適化
コンパイル時に、実行速度、コードサイズ、メモリ使用量など、指定した目的に応じてプログラムを効率化する機能。 - オープンソースソフトウェア(OSS)
オープンソースソフトウェア(Open Source Software)とは、ソースコードを入手でき、ライセンス条件に従って利用、改変、再配布できるソフトウェアのこと。 - OSSの信頼性
OSSを利用する場合に重要となる信頼性について、次の項目で評価。 - OSSのライセンス
OSSで使われるライセンス上の考え方、提供方法、具体的なライセンスを整理。
ファイルシステム
ファイルシステムとは、記憶装置に保存されたデータをファイルとしてディレクトリ管理する仕組みのこと。
最上位ディレクトリをルートディレクトリ、ルートディレクトリからファイルまでのフルパスを絶対パス、任意のディレクトリからファイルまでを相対的に表すパスを相対パスという。
プログラミングツール
開発ツールと呼ばれるものに工程の一部を自動化(E-R図からDBを作成するなど)するCASE(Computer Aided Software Engineering)ツールや、開発作業全体的に支援するIDE(Integrated Development Environment:統合開発環境)がある。
- IDEの代表例
Eclipse、Visual Studio、Visual Studio Code、Xcodeなど。
以下、IDEが搭載するプログラミングツールの代表的な機能。
-
トレーサ
プログラムの実行経路(実行履歴)を出力する機能。 -
インスペクタ
プログラム実行時、変数やオブジェクトなどが持つデータ内容を表示する機能。 -
エディタ
効率的にコーディングできるようプログラムコードを見やすく、編集しやすくしたエディタ機能。 -
リポジトリ
開発の成果物を一元管理するデータベース。バージョン管理により、差分の確認や最新状態の戻しなど容易に操作できる。
リポジトリを管理する代表的なバージョン管理システム:Git、SVN(Subversion)など。 -
アサーションチェッカー
プログラム処理の途中にアサーション(想定通り実行されれば、論理的に成立する条件)を登録して、期待通りであるかチェックする機能。 -
エミュレータ
プログラム搭載されるコンピュータやハードウェアの動作を再現する機能。 -
シミュレータ
仮想的な状況を模擬的に再現し、シミュレーションできる機能。 -
スナップショット
任意のストレージ状態をそのまま記録する機能で復元も可能。 -
プロファイラ
プログラム性能の改善を目的とした監視項目(モジュール単位の実行回数や実行時間など)を計測および解析する機能。
言語処理ツール
言語処理ツールとは、プログラム言語を実行する際に必要となる機能を指し、次の種類がある。
-
コンパイラ
ソースコード全体を、機械語、オブジェクトコード、中間コードなどの別形式へ変換する機能。 -
インタプリタ
ソースコードを命令単位の実行順に解析し、実行可能な状態に変換しながら命令単位でプログラムを実行する機能。 -
クロスコンパイラ
開発環境とは別の環境に向けて実行ファイルを作成する機能。
※ 組込み型システムでは、実機環境へ向けてコンパイルし、実行ファイルを組込むことが多い。 -
アセンブラ
アセンブリ言語を機械語による表現へ変換する機能。- アセンブリ言語、機械語について
→ 応用情報技術 - プログラム構造・言語 > プログラム言語の変遷
- アセンブリ言語、機械語について
-
ジェネレータ
指定した条件に基づいてデータやソースコードを自動的生成する機能。
コンパイラ最適化
コンパイル時に、実行速度、コードサイズ、メモリ使用量など、指定した目的に応じてプログラムを効率化する機能。複数の目的にはトレードオフがあるため、すべてを同時に最小化できるとは限らない。
次の最適化技法がある。
-
ループ最適化
ループ処理で条件が変化しないなどのループ不変式をループの前に移動するなど、ループ内の処理量を減らす最適化のこと。 -
局所最適化
基本ブロックなど、プログラム内の限られた範囲を対象に、不要な計算の除去や式の簡略化を行う最適化のこと。 -
プロシージャ間最適化
プログラム全体を対象とし、プロシージャの境界やファイルの境界を越えた最適化のこと。 代表的な最適化として、関数の呼出し元に関数内の処理を展開し、関数への制御転送を無くすインライン展開がある。
オープンソースソフトウェア(OSS)
オープンソースソフトウェア(Open Source Software)とは、ソースコードを入手でき、ライセンス条件に従って利用、改変、再配布できるソフトウェアのこと。無償であること自体は必須条件ではなく、配布条件が次の定義を満たすことが重要となる。
- OSSの定義(オープンソース推進団体OSIのオープンソースライセンス条件)
- 自由に再配布できること。
- ソースコードを公開すること。
- 改変や派生物の作成と頒布を許可すること。
- 基本ソースとパッチ(差分情報)という形で頒布することを義務づけても良い。
- 個人やグループに対する差別をしないこと。
- 利用する分野に対する差別をしないこと。
- ライセンス分配に追加ライセンスを必要としないこと。
- 特定製品でのみ有効なライセンスにしないこと。
- 他のソフトウェアを制限するライセンスにしないこと。
- ライセンスは、技術的な中立を保つこと。
※ 詳細:https://opensource.org/osd
以下、代表的なOSS。
-
Webサーバー構築
Nginx、Apache HTTP Server、H2O、OpenLiteSpeed など。
※ LiteSpeed Web Server Enterpriseは商用製品で、OpenLiteSpeedがオープンソース版となる。 -
APサーバー構築
Apache Tomcat、GlassFish、Payara、Jetty など。 -
ログ管理構築
Apache Log4j、Fluentd など。 -
メールサーバー構築
Postfix、qmail、sendmail など。 -
DNSサーバー構築
BIND、PowerDNS、Unbound など。 -
DBサーバー構築
PostgreSQL、MySQL、MariaDB、MongoDB など。 -
ORマッピング構築
MyBatis、Hibernate など。 -
OS構築
CentOS Stream、Ubuntu、Fedora、FreeBSD など。
※ CentOS Linux 7は\(2024\)年\(6\)月\(30\)日にサポートを終了している。 -
プログラム言語
Java、PHP、Ruby、Perl、Go など。 -
Java向けデータ処理ライブラリ
Jackson など。 -
クラウド構築
OpenStack、OKD、Moby、runC など。
※ OpenShiftやDockerには商用製品も含まれるため、ここでは対応するオープンソースプロジェクト名を記載している。 -
機械学習・ディープラーニングライブラリ
TensorFlow、scikit-learn、PyTorch、Keras、PyCaret など。
OSSの信頼性
OSSを利用する場合に重要となる信頼性について、次の項目で評価する。
- ソフトウェア自体の信頼性
- メンテナンスの容易さ
- 法的問題の有無
- 開発コミュニケーションのサポート体制
特定の時点の知名度だけで判断せず、更新履歴、脆弱性情報、コミュニティの活動状況、ライセンス条件を継続的に確認することが重要となる。
OSSのライセンス
OSSには、次のようなライセンス上の考え方、提供方法、具体的なライセンスがある。著作権者は、第三者のコードを含む場合の互換性などを確認したうえで、適用するライセンスを選ぶ。
※ 解説は概要レベルに留めているので注意。
-
コピーレフト
著作権を保持したまま利用、改変、再配布を認め、派生物を配布する場合にも同じ自由を保つため、同一または互換性のあるライセンス条件を求める考え方。具体的な義務はライセンスごとに異なる。 -
デュアルライセンス
2種類以上のライセンス形態で配布する形式で利用者の条件に応じて適切なライセンスを選択することができる。
※ 商用ライセンスとオープンソースライセンスの組合わせなど。 -
GPL(GNU General Public License)
GPLで許諾されたプログラムを改変して配布する場合などに、対応するソースコードの提供とGPL条件の維持を求めるコピーレフトライセンス。
他のライセンスのコードと組み合わせて配布できるかは、GPLとのライセンス互換性や結合方法によって異なる。 -
BSD(Berkeley Software Distribution)
無保証の明記と著作権と許諾の表示をする以外は、自由に利用・改変・再配布・販売を行っても良いというライセンス形態。
まとめ
- ファイルシステムは、記憶装置上のデータをファイルとディレクトリの階層で管理。
- コンパイラはソースコードを別形式へ翻訳し、インタプリタはコードを解析しながら実行する。アセンブラやクロスコンパイラは、対象とする言語や実行環境が異なる。
- コンパイラ最適化は、プログラムの意味を保ちながら実行速度やコードサイズなどを改善する。
- OSSは単なる無料ソフトではなく、ソースコードの公開と利用条件が重要になる。GPLとBSDライセンスでは、改変物の配布時などに求められる条件が異なる。
参考文献
- 瀬戸 美月 (\(2020\)) 『徹底攻略 応用情報技術者教科書』株式会社インプレス
- GNUプロジェクト - GNUライセンスに関してよく聞かれる質問(日本語・GPLの公式解説)
- Open Source Initiative - The Open Source Definition(英語・オープンソースの定義原文)
- GNU Compiler Collection - Optimize Options(英語・コンパイラ最適化の公式仕様)