マーカー、蛍光ペン、鉛筆、付箋などのカラフルな文房具に囲まれて、黄色い付箋に文字を書く人の姿が映し出された、活気のあるワークスペースの光景です。

コード・ドキュメンテーションとは

コード・ドキュメンテーションの定義

コード・ドキュメンテーションとは、ソフトウェア・プロジェクトのソース・コードを記述および説明するプロセスです。それは ソフトウェア開発 の不可欠な要素であり、コード・コメント、共有ファイル、または中央のナレッジ・ベースなど、さまざまな形式をとることができます。

コード・ドキュメンテーションは、コードベースを扱う人々にとっての地図として機能し、それぞれのコードが何を行うか、どのように動作するか、その使用方法、およびすべてのコードがどのように組み合わされているかを把握するのに役立ちます。コードを文書化することは、開発チームがソースコードをより適切に保守するのに役立つと同時に、サイバーセキュリティーアナリスト、データサイエンティストDevOpsエンジニア、プロダクトおよびプロジェクト・マネージャー、QAエンジニア、テクニカル・ライターなど、コードを理解して作業する必要がある他のステークホルダーを導くことにもなります。

コード・ドキュメンテーションとコードとしてのドキュメンテーションの比較

コードとしてのドキュメンテーション(「docs as code」)は、ドキュメンテーションをソフトウェア・コードのように扱います。このアプローチは、変更のレビューや追跡を行うためのバージョン管理システム、フォーマットやスタイルの問題を特定するための自動テスト、およびドキュメンテーションの更新とデプロイを行うための継続的インテグレーション継続的デリバリーCI/CD)など、ソースコードと同じツールを使用してドキュメンテーションを管理します。

コード・ドキュメンテーションはコードを文書化するというより幅広い実践を網羅しているのに対し、docs as codeはドキュメンテーションを記述するための特定の戦略であり、より技術的なアプローチです。

コード・ドキュメンテーションの種類

コード・ドキュメンテーションの構造は、対象読者が誰であるか、またそれがどのように使用されるかによって異なります。以下に、一般的なドキュメンテーションの種類をいくつか示します。

  • 低レベルのドキュメンテーション

  • 高レベルのドキュメンテーション

  • 内部ドキュメンテーション

  • 外部ドキュメンテーション

低レベル・ドキュメンテーション

低レベルのドキュメンテーションでは、通常、コード内のインライン・コメントを参照します。ドキュメンテーションを記述する最も基本的な方法の1つとして、これらのアノテーションは特定のコード行やブロックについて説明します。

def multiply(x, y):
    # Returns the product of two numbers
    return x * y

ドキュメンテーション・ストリング(またはドックストリング)も、低レベル・ドキュメンテーションの手法の1つです。これらは、クラス、関数、メソッド、またはモジュールの定義の前に記述されます。ドックストリングには構造化されたフォーマットがあり、目的、使用例、機能、パラメーター、および戻り値を宣言します。

def reverse_string(s):
    ‘’’
    Returns the reverse of a string value
    Parameters:
        s (str): The string to be reversed
    Returns:
        rev (str): The string value in reverse
    ‘’’

    rev = ‘’
    x = len(s)

    while x > 0:
        rev += s[x - 1]
        x = x - 1

    return rev

インライン・コメントは、コード自体を調べても論理(ロジック)を推測できない場合や、より複雑なアルゴリズムに基づくコードの論理を指定するのに適しています。一方、ドックストリングは、アプリケーション・プログラミング・インターフェース(API)ドキュメンテーション用に抽出することができ、統合開発環境(IDE)内で文脈に応じたヘルプを提供できます。

高レベル・ドキュメンテーション

コードの各部分を個別のエンティティーとして記述する低レベル・ドキュメンテーションとは異なり、高レベル・ドキュメンテーションには、より広範なアーキテクチャーのワークフローにおけるそれらの役割に関する詳細が含まれます。この種のソフトウェア・ドキュメンテーションには、コード・アーキテクチャーを示すフローチャートや統一モデリング言語(UML)図、ビジネス・ロジックやコードが製品要件にどのように適合しているかの概要を示す設計文書、およびコードベースやコード・リポジトリーの構造の仕様などが含まれます。

内部ドキュメンテーション

この技術ドキュメンテーションは、企業内での内部使用を目的としています。例としては、チームがソフトウェアを構築する方法に関するコーディング規約や標準、およびプロセス文書などが挙げられます。開発環境を設定するためのガイドも、内部ドキュメンテーションに該当します。

外部ドキュメンテーション

このユーザー向けのドキュメンテーションは、企業の外部の開発者やその他のユーザーを対象としています。例えば、APIドキュメンテーションには、ソフトウェア・プロジェクトのパブリックAPIで利用可能なクラス、関数、メソッド、およびモジュールが配置されます。外部ドキュメンテーションは、構成ファイル、統合ノート、およびREADMEファイルで構成することもできます。

READMEファイルは、プレーン・テキストをフォーマットするための軽量マークアップ言語であるマークダウンで記述されます。これには、プロジェクトの機能、依存関係、インストール手順、コマンド・ライン・インターフェース(CLI)コマンド、およびヘルプやサポートを受けるためのオプションに関する情報が含まれています。オープン・ソースプロジェクトでは、バグ修正やコード変更をコード・リポジトリーのメイン・ブランチにマージするためにプル・リクエストを送信するための、ライセンスの詳細やコントリビューター・ガイドラインも追加されます。

コード・ドキュメンテーションのメリット

クリーンで明確な方法でコードを記述することは、それ自体がドキュメンテーションの一種になり得ます。しかし、優れたドキュメンテーションは依然として不可欠であり、以下のメリットをもたらします。

  • コラボレーションの強化

  • 保守性の向上

  • ソフトウェア開発の迅速化

  • オンボーディングの合理化

コラボレーションの強化

十分に文書化されたコードは、開発チーム内のコラボレーションとコミュニケーションを向上させます。メンバーは、コード・レビューの実施、コード変更の議論、およびチームとしての意思決定を行うための共通言語として、コード・ドキュメンテーションを活用できます。

保守性の向上

ドキュメンテーションは、コードのリファクタリング、保守、およびパフォーマンスの最適化を容易にします。デバッグ中、開発者はコード・ドキュメンテーションをリファレンス・ポイントとして使用して、コーディング・エラーを見つけ、その根本原因を特定できます。

ソフトウェア開発を高速化する

優れたドキュメンテーションは迅速な開発への道を開き、コードの機能を把握するための時間を節約し、代わりに適切なコード・アップデートの適用へと焦点を戻すことができます。また、変更の追跡にも役立ち、チームが頻繁に進化するコードベースに確実に遅れずについていくことができるようにします。

オンボーディングの合理化

コード・ドキュメンテーションは、新しいチーム・メンバーがコードベースの内部構造を学習するのを支援します。彼らはコードのデザインや構造に迅速に慣れ親しむことができ、プロジェクトに素早く貢献できるようになります。

効果的なコード・ドキュメンテーションを作成するためのヒント

コードとドキュメンテーションは密接に連携しているため、これらは共に進化する必要があります。正式なガイドラインの一部は、ドキュメンテーションの記述にも同様に適用されます。役立ついくつかのヒント

  • コード・ドキュメンテーション標準の確立

  • ドキュメンテーションとコーディングの統合

  • 明確さと簡潔さが重要

  • コーディングに関する決定の文書化

  • 最新の状態に維持する

コード・ドキュメンテーションの標準を確立する

コーディング規約と同様に、コード・ドキュメンテーションにおいても標準に従う必要があります。これらの標準には、低レベル・ドキュメンテーションにおけるインデント、改行、スペースなどの一貫したフォーマットが含まれます。一方、テンプレートやコード・ドキュメンテーション・ツールは、APIドキュメンテーションやその他の高レベルおよび外部ドキュメンテーションのスタイルや構造に役立ちます。

ドキュメンテーションをコーディングに統合する

これには、関数の完了時にドックストリングを追加することや、複雑なアルゴリズムやロジックの実装中にインライン・コメントを挿入することが含まれる場合があります。プログラミング中にドキュメンテーションを記述することは、開発者が自らの思考プロセスや決定を明確にするのに役立ち、その過程で重要な詳細が見落とされないようにします。最初は少し余分な時間がかかるかもしれませんが、コーディング・プロセスの自然な一部となり、将来のデバッグ、最適化、およびリファクタリングを迅速化できます。

明確さと簡潔さが重要である

過剰なドキュメンテーションは、コードの可読性を損なう可能性があります。開発者はクリーンで明確なコードを記述することを最優先し、そのコードにすっきりと収まる必要なドキュメンテーションを追加する必要があります。

簡潔さに関しては、適切なバランスを見つけることが極めて重要です。例えば、短くてシンプルなコード断片には、ドキュメンテーションが全く必要ない場合があります。一方、より高度なアルゴリズムには、さまざまな経験レベルの開発者が理解できる方法で、基盤となるロジックを説明するドキュメンテーションが必要です。

コーディングの決定をドキュメント化する

これには、デザイン、アーキテクチャー、ロジック、およびアルゴリズムの選択肢が含まれます。高レベルな内部文書であれ、共有ナレッジ・ベースであれ、これらのコーディングの決定をドキュメント化することは、将来行われる変更のコンテキストを提供します。

最新の状態の維持

開発チームは、ソフトウェアの現在の状態を反映し、正確で完全、かつ適切なものであることを確認するために、コード・ドキュメンテーションの定期的なレビューと更新を行う必要があります。ドキュメンテーションをコード・レビュー・プロセスに組み込むことは、定期的な更新に役立ちます。

アプリケーション開発

さあ、クラウドでエンタープライズ・アプリケーション開発を始めましょう

この動画では、Peter Haumer博士が、IBM Z Open Editor、IBM Wazi、Zoweなどのさまざまなコンポーネントとプラクティスを実演しながら、ハイブリッドクラウドでの最新エンタープライズ・アプリケーション開発について説明します。

コード・ドキュメンテーション・ツール

ほとんどのIDEにはコード・ドキュメンテーションを生成するための拡張機能やプラグインがありますが、他のフレームワークやツールもプロセスの自動化を支援できます。以下に、よく使われるドキュメンテーション生成ツールをいくつか紹介します。

  • Doxygen

  • GitBook

  • Javadoc

  • JSDoc

  • Sphinx

Doxygen

Doxygenは、C、C++、Java、PHP、およびPythonなどの複数のプログラミング・言語をサポートしています。マークダウン・レンダリングが可能であり、HTML、PDF、およびXMLフォーマットでドキュメンテーションを生成できます。Doxygenは構成ファイルを通じてカスタマイズ可能であり、クラスと関数の間の視覚的な階層構造や相関関係を示すダイアグラムを生成する機能を提供します。

GitBook

GitBook は、ドキュメンテーションをWebサイトとして執筆および公開するためのユーザー・インターフェースを提供し、これにより内部および外部のドキュメンテーションの両方をより効率的に作成できるようになります。このプラットフォームは、GitHub社またはGitLab社のリポジトリーとの同期機能も備えています。

Javadoc

Javadocツールは、 Java のソースコード内のドキュメンテーション・コメントを解析して、HTMLフォーマットでAPIドキュメンテーションを生成します。クラス、コンストラクター、フィールド、インターフェース、およびメソッドをドキュメント化できます。

JSDoc

Javadocと同様に、JSDocはJavaScriptプロジェクト用のAPIドキュメンテーションを生成します。そのオープンソース・コミュニティーは、ドキュメンテーションをカスタマイズするためのテンプレートやツールを開発してきました。

Sphinx

Sphinxは主にPython向けに構築されていますが、他のプログラミング言語にも拡張されています。マークダウンと、reStructuredTextと呼ばれる独自のマークアップ言語をサポートしています。Sphinxはさまざまなアウトプット・フォーマットでドキュメンテーションを作成することができ、他のコード要素にリンクするためのクロスリファレンス機能を備えています。

コード・ドキュメンテーション向けの生成AI

ドキュメンテーション・ジェネレーターは、ソースコード全体で検出される注釈に限定されます。生成AIはドキュメンテーションを一歩進め、特定のコード・スニペットを分析し、その目的と機能を説明するコード・コメントを追加します。多くのコード向けの大規模言語モデル(LLM)は、ドキュメンテーションを生成するための組み込み機能を備えています。

例えば、IBM® Bobは、単一のメソッドまたはクラス内のすべてのメソッドのコメント行を生成できます。他の同様のツールには、GitHub社Copilot、JetBrains社AI Assistant、Mintlify、およびTabnineがあります。

他のあらゆる人工知能システムと同様に、開発者は完全性と正確性を確保するために、AI搭載コード・ドキュメンテーション・ツールのアウトプットを引き続きレビューする必要があります。

執筆者

Rina Diane Caballar

Staff Writer

IBM Think

Cole Stryker

Staff Editor, AI Models

IBM Think

関連ソリューション
IBM Bob

安全で意図を認識した開発を実現するAIパートナーであるBobと連携して、ソフトウェア・デリバリーを加速させましょう。

IBM Bobはこちら
AIコーディング・ソリューション

信頼性の高いAI駆動型ツールを活用することで、コード作成、デバッグ、リファクタリング、コード補完に費やす時間を最小限に抑え、イノベーションに集中できる余地を広げます。

AIコーディング・ソリューションはこちら
AIコンサルティングとサービス

AIの導入によって重要なワークフローと業務を再構築し、エクスペリエンスの最大化、リアルタイムの意思決定、ビジネス価値の向上を実現しましょう。

AIコンサルティング・サービスはこちら
次のステップ

生成AIと高度な自動化を活用して、企業向けのコードをより迅速に作成Bobモデルは開発者のスキルセットを強化し、開発とモダナイゼーションの取り組みを簡素化、自動化します。

  1. IBM Bobの詳細
  2. AIコーディング・ソリューションはこちら