SIGMA-SE Tech Blog

SIGMA-SE Tech Blog


当サイトは、過去に運営していた別ドメイン(unisia-se.com)から sigma-se.com へ移行した技術ブログです。
旧サイトの記事をもとに、内容の精査・加筆・最新化を行い再構成しています。
正確で実用的な情報提供を目的としています。

応用情報技術 - 基礎:14/21 ソフトウェア(開発ツール・OSS・ライセンス)

概要

情報技術の基礎として理解しておきたいソフトウェアのうち、ファイルシステム、開発支援ツール、言語処理ツール、最適化、OSS、ライセンスを整理する。

ソフトウェア分野では、プログラムを作る道具、実行する仕組み、公開・利用するルールを整理する。
開発現場で使うツールやOSSライセンスと結び付けると、単なる用語暗記になりにくい。

この記事で扱うこと

  • ファイルシステムの基本的な役割。
  • エディタ、デバッガ、テストツールなど開発支援ツールの用途。
  • コンパイラ、インタプリタ、アセンブラなど言語処理ツールの違い。
  • コンパイラ最適化の目的。
  • OSSの特徴と代表的なライセンス。

理解しておきたい要点

分野 整理する内容
ファイルシステム 階層構造、パス、アクセス権など。
開発ツール デバッグ、テスト、構成管理、CIなどの役割。
言語処理 コンパイラ、インタプリタ、リンカ、ローダの違い。
最適化 実行速度やコードサイズを改善する処理。
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)、VSS(Visual SourceSafe)など。

  • アサーションチェッカー
    プログラム処理の途中にアサーション(想定通り実行されれば、論理的に成立する条件)を登録して、期待通りであるかチェックする機能。

  • エミュレータ
    プログラム搭載されるコンピュータやハードウェアの動作を再現する機能。

  • シミュレータ
    仮想的な状況を模擬的に再現し、シミュレーションできる機能。

  • スナップショット
    任意のストレージ状態をそのまま記録する機能で復元も可能。

  • プロファイラ
    プログラム性能の改善を目的とした監視項目(モジュール単位の実行回数や実行時間など)を計測および解析する機能。

言語処理ツール

言語処理ツールとは、プログラム言語を実行する際に必要となる機能を指し、次の種類がある。

  • コンパイラ
    プログラム言語に応じたソースコードを実行可能な機械語に変換する機能。

  • インタプリタ
    ソースコードを命令単位の実行順に解析し、実行可能な状態に変換しながら命令単位でプログラムを実行する機能。

  • クロスコンパイラ
    開発環境とは別の環境に向けて実行ファイルを作成する機能。
    ※ 組込み型システムでは、実機環境へ向けてコンパイルし、実行ファイルを組込むことが多い。

  • アセンブラ
    アセンブリ言語を機械語による表現へ変換する機能。

  • ジェネレータ
    指定した条件に基づいてデータやソースコードを自動的生成する機能。

コンパイラ最適化

コンパイル時に実行時間、メモリ使用量、消費電力等を最小化し、効率化した実行ファイルを作成する機能。

次の最適化技法がある。

  • ループ最適化
    ループ処理で条件が変化しないなどのループ不変式をループの前に移動するなど、ループ内の処理量を減らす最適化のこと。

  • 局所最適化
    局所参照性(メモリ内の偏った参照)を増大させ、アドレスへのアクセスを効率化する最適化のこと。

  • プロシージャ間最適化
    プログラム全体を対象とし、プロシージャの境界やファイルの境界を越えた最適化のこと。 代表的な最適化として、関数の呼出し元に関数内の処理を展開し、関数への制御転送を無くすインライン展開がある。

オープンソースソフトウェア(OSS)

オープンソースソフトウェア(Open Source Software)とは、作成者がソースコードを無償で公開し、利用や改変、再配布が自由に許可されているソフトウェアのことで、次の定義となっている。

  • OSSの定義(オープンソース推進団体OSIのオープンソースライセンス条件)
    1. 自由に再配布できること。
    2. ソースコードを公開すること。
    3. 派生物の作成と同じライセンスで頒布許可すること。
    4. 基本ソースとパッチ(差分情報)という形で頒布することを義務づけても良い。
    5. 個人やグループに対する差別をしないこと。
    6. 利用する分野に対する差別をしないこと。
    7. ライセンス分配に追加ライセンスを必要としないこと。
    8. 特定製品でのみ有効なライセンスにしないこと。
    9. 他のソフトウェアを制限するライセンスにしないこと。
    10. ライセンスは、技術的な中立を保つこと。
      ※ 詳細:https://opensource.org/osd

以下、代表的なOSS。

  • Webサーバー構築
    Nginx、Apache HTTP Server、H2O、LiteSpeed Web Server など。

  • 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、Ubuntu、Fedora、FreeBSD など。

  • プログラム言語
    Java、PHP、Ruby、Perl、Go、Jackson など。

  • クラウド構築
    OpenStack、OpenShift、Docker、runC など。

  • ディープラーニングライブラリ
    TensorFlow、scikit-learn、PyTorch、Keras、PyCaret など。

OSSの信頼性

OSSを利用する場合に重要となる信頼性について、次の項目で評価する。

  • ソフトウェア自体の信頼性
  • メンテナンスの容易さ
  • 法的問題の有無
  • 開発コミュニケーションのサポート体制

※ IPA(独立行政法人情報処理推進機構)は、信頼性評価ツールを公開し、OSSの評価基準を提供している。

OSSのライセンス

OSSのライセンス形態は、次の種類があり、原作者が決めることができる。
※ 解説は概要レベルに留めているので注意。

  • コピーレフト
    著作権を保持したまま、著作物の利用・改変・再配布を認め、派生(拡張)した著作物についても一切の制限をかけてはいけないというライセンス形
    ※ コピーレフト性が強いものとして WordPress がある。

  • デュアルライセンス
    2種類以上のライセンス形態で配布する形式で利用者の条件に応じて適切なライセンスを選択することができる。
    ※ 商用ライセンスとオープンソースライセンスの組合わせなど。

  • GPL(General Public Licence)
    コピーレフトのライセンス形態に加え、他のソフトウェアライセンスを組込み、派生(拡張)した著作物についても利用・改変・再配布を認め、一切の制限をかけてはいけないというライセンス形態。
    ※ OSSだけでなくフリーソフトウェアなどでも多く採用されている。

  • BSD(Berkeley Software Distribution)
    無保証の明記と著作権と許諾の表示をする以外は、自由に利用・改変・再配布・販売を行っても良いというライセンス形態。

違いを整理する

比較する項目 整理するポイント
コンパイラとリンカ コンパイラは翻訳、リンカは複数のオブジェクトを結合する。
インタプリタとスクリプト インタプリタは実行方式、スクリプトは書かれるプログラムの性質。
OSSと無料ソフト OSSはソースコードの公開や利用条件が重要。
GPLとMIT 再配布時の条件の強さが異なる。
デバッガとテストツール デバッガは動作追跡、テストツールは検証の自動化に使う。

実務とのつながり

  • 開発ツール
    日々の実装、テスト、デバッグ、リリース作業に直結する。

  • OSSライセンス
    商用利用や再配布時のリスク確認に必要となる。

  • 言語処理ツール
    ビルドエラーや実行環境の問題を切り分ける助けになる。

まとめ

  • ソフトウェア分野では、開発・実行・配布に関わる道具とルールを整理する。
  • 言語処理ツールは、ソースコードを実行可能な形へ変換するために使われる。
  • OSSは便利だが、ライセンス条件を理解して利用する必要がある。

参考文献

  • 瀬戸 美月 (\(2020\)) 『徹底攻略 応用情報技術者教科書』株式会社インプレス


Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp