ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
XcodeにおけるDocCドキュメントについて
Swiftパッケージやフレームワークに関するドキュメントを構築・共有するために、DocCをどのように利用できるかについて確認します。自作のコードや依存しているサードパーティのコードからドキュメントの生成を開始し、Markdownを使用して記述およびフォーマットする方法を紹介します。また、公開を目的としたDocCアーカイブ生成のためのエクスポートのプロセスについても解説します。
リソース
- Documenting a Swift Framework or Package
- Formatting your documentation
- SlothCreator: Building DocC Documentation in Xcode
- Writing symbol documentation in your source files
関連ビデオ
WWDC23
WWDC21
-
ダウンロード
こんにちはVictoriaです AppleのDocumentation Toolsチームの エンジニアです 同僚のEthanと共に Xcode 13での新しい ドキュメント機能を紹介します ワークフローに適した新たな ドキュメントの読み書き方法で 開発の新しい可能性を解き放ちましょう Xcode 13にはSwiftフレームワークとパッケージの ドキュメントを構築作成 閲覧するための 新機能があります これによりコードを記述しながら Swiftの依存関係をすべて確認できる ドキュメント主導の強力な 開発が可能になります この機能はXcodeのDeveloper Documentation 内のプラットフォームライブラリにあります この動画では Xcode 13のドキュメント機能の概要説明 あなたが使用している Swiftフレームワークとパッケージの ドキュメント作成方法 Xcode13を使用して 優れたドキュメントを作成する方法 そしてXcode13で ドキュメントを共有する方法を説明します 初めに私が個人的にドキュメントの新機能に 期待している点をお話します 誰もが経験があるはずです 使用したい新しいフレームワークやパッケージを コードに実装する際は 何が含まれているかすべて 把握しなければなりません ここで登場するのがXcode 13です Xcodeにはドキュメントとコード用の コンパイラが付属しており Swiftフレームワークとパッケージのドキュメントを すべてXcode内でビルドおよび表示できます AppleではこれをDocCと呼んでおり ドキュメントの読み取りと書き込みの方法を 強化するためにXcode全体に実装されています DocCは事後に実行される単なる ドキュメントコンパイラではありません Xcodeを補完する 完全に統合されたドキュメント環境です クイックヘルプにドキュメントが表示される リッチなライブ環境 ドキュメントを全体に結び付けられる 優れたコード補完 さらに統合されたDeveloper Documentationウィンドウが 完全なドキュメント機能を提供します 作成済みのドキュメントを共有して XcodeやWebで表示するなどの 簡単なオプションがあります DocCに関する詳細については WWDC 2021の他の動画もご覧ください DocCはXcodeと Swiftの機能を活用し フレームワークまたはパッケージ内の パブリックAPIの全体像を提供します APIが単独でではなく どう連携可能かを説明する機能を備えた 優れたリファレンスドキュメントを作成できます それだけにとどまらず DocCは他にも多くのことを可能にします DocCを使ってドキュメントを作成する 新たな方法を他に2つ紹介します 記事を使用するとフレームワークの背後にある 全体像をユーザーに説明しフレームワーク内の 個々のアイテムをまとまりのあるストーリーと 結び付けることができます チュートリアルではフレームワークを使った プロジェクトの作成方法を ステップ別に説明しています ユーザーにフレームワークに関する ガイド付きの説明が提供されるため リファレンスドキュメントや記事よりも はるかに深い理解が可能です
こうしたオーサリング体験はマークダウンの 威力とシンプルさを活用および拡張して コードを書くのと同じくらいスムーズな ドキュメントのオーサリングを実現します ソースコード以外の記事や チュートリアルを含むドキュメントカタログの 作成について詳しく知りたい場合は 今年のWWDCのこれらの動画をご覧ください
また今年後半にオープンソースとして DocCがリリースされます 構築したドキュメントアーカイブを Web上でホストできる Web Appと一緒に使用することで Xcodeの外部でも 新しいドキュメントワークフローを利用できます Xcode 13の新しい ドキュメント機能を理解したところで XcodeのDocCを使用して ドキュメントを作成する方法について説明します まずはその仕組みから見ていきましょう ドキュメントを作成するためにXcodeは フレームワーク又はパッケージをビルドし コンパイルされたアーティファクトと一緒に パブリックAPIに関する情報を 保存するようコンパイラーに要求します パブリックAPIの情報がDocCに渡されると ソースコードの外部で記述された 記事やチュートリアルなどの ドキュメントカタログと 組み合わせてコンパイルしたドキュメントを含む 最終的なアーカイブを作成します ドキュメントカタログと ドキュメントの整理についての詳細は Xcodeセッションの動画 「XcodeにおけるDocCドキュメントの レベルの向上」をご覧下さい。 DocCとXcodeのビルドシステム統合のおかげで このプロセスはターゲットが依存する全Swiftの フレームワークとパッケージ に対して繰り返されます これにより関連するドキュメントを すべて1箇所に集約できます 日々のドキュメント業務では どう役立つのでしょうか? Xcode 13でSwiftフレームワークとパッケージの ドキュメントを作成する方法は3つあります
ドキュメントをオンデマンドでビルドする場合 ドキュメントをコンパイルし読み込むための新機能 “Build Documentation”を使用します またSwiftフレームワークで作業していて ドキュメントを常にプレビューしたい場合 コンパイルする度にドキュメントをビルドできる 新しいビルド設定があります コマンドラインとCIのニーズ に対してxcodebuildには ドキュメントをビルドできる新しいコマンドがあり “Build Documentation”と 同じビルドを実行しますが コマンドラインでxcodebuildを使用します ドキュメントワークフローの自動化に関する 詳細は 同僚のデイビッドによる動画 「DocCドキュメントのホスト と自動化」をご覧ください。 実際の例で見てみましょう。 私のチームメートはSlothCreator という名のパッケージを使用しています ナマケモノのカタログ化とカスタマイズが目的です これがXcode 13でどう機能するかを見てみましょう Slothyと名付けたこのAppをセットアップしたので ナマケモノをカスタマイズしプレビューできます Appの依存関係としてSlothCreatorを設定しました 提供されるAPIについて詳しく知りたいので “Product”メニューを開いてみましょう
次に“Build Documentation”を選択します
このように “Developer Documentation”ウィンドウが開き “Navigator”で Slothyプロジェクトと作業中の SlothCreatorパッケージを 展開して概要を確認できます SlothCreatorの概要をメインビューにロードします 下にスクロールすると 使用可能なタイプとプロトコルが表示されます
ここにHabitatというタイプがあります クリックしてページを読み込みましょう
詳しい情報が書いてありますが 他にも情報が記述されている 場所があるかもしれません 上部の検索欄でHabitatを検索します
いくつかの場所で記載があるようです “睡眠”メソッドをクリックして ドキュメントを開きましょう
これは睡眠メソッドに特化したページですが どのタイプに属するのでしょうか? ウィンドウ上部のジャンプバーから “ナマケモノ”タイプに属することがわかります
ナマケモノをクリックすると プルダウンメニューが現れ 再度クリックすると このタイプのドキュメントが開けます これらのAPIの使い方がわかってきましたね ここまでは SlothCreatorのドキュメントを使って説明しました もう一度おさらいしましょう同僚のEthanが Xcode 13の新機能を紹介し 優れたドキュメントの 作成方法を説明します Ethan お願いします ありがとうVictoria ドキュメントの作成と閲覧に関する Xcode13の高度な機能を学んだところで DocCを使用してさらに優れた ドキュメントを作成するための秘訣を紹介します
DocCはソース内ドキュメントの 利点を中心に設計されています ドキュメントをコードと一緒に書くことで 既存の開発ワークフローとの 統合が便利で簡単になります
宣言にドキュメントを追加するには そのすぐ上に特別なコメントを書きます これによりコードの変更があっても ドキュメントは同期された状態を維持します もちろんgit diffのような既存の テキストベースのツールにも対応します
今後コードベースを管理する人に 追加のコンテキストを提供するため ソースコードに注釈を付けることもあるでしょう Swiftや他の多くの言語の場合 2つのスラッシュの後にコメントを記述します コメントを書くことで 将来の管理者がコードを 理解しやすくなり生産性が上がります 今すぐフレームワークの 使用者をサポートしたい場合はどうでしょう? そのためにドキュメントにコメントを書くのです 3つのスラッシュで始まるコメントを 書くことにより Swiftドキュメントコンパイラに コメントをそのすぐ下の 宣言に関連付けるように 指示できます コメントはシンボルの コンパイル済みドキュメントページに含まれ フレームワークをインポート する全員がアクセス可能です ブロックスタイルのコメントを使用する場合は 開始区切り文字に追加の アスタリスクを含めるだけで そのスタイルのコメントを作成できます 実際の動作を見てみましょう Victoriaが話した通りAppleはここ数ヶ月 SlothCreatorフレームワークの開発を行っています SlothCreatorはナマケモノのカタログ化と カスタマイズが可能なSwiftパッケージです SlothCreatorの開発者として ユーザーがフレームワークを簡単に 使い始められるように 私が書いたコードベースの部分に ドキュメントコメントを追加しています 特にSlothCreatorのすべてのパブリックAPIが 十分にドキュメントされる ようにしたいと思っています このフレームワークをインポートする全員が アクセスできるのはこれらのAPIだからです 同じ理由でDocCは フレームワーク内のパブリックシンボルと オープンシンボルの ドキュメントページのみを生成します ドキュメントが必要なSlothCreatorの シンボルはあと少しだけです “Food”構造体から始めましょう まずタイプの宣言の上に 3つのスラッシュを追加して
ドキュメントコメントを作成します “ナマケモノが食べれる食べ物”と書きます ドキュメントコメントの最初の行は シンボルの要約になりますが ディスカッションセクションでさらに 情報を追加したいと思います 要約の後に改行を追加してから ナマケモノが好きな食べ物の 種類に関する詳細を追加します DocCはマークダウンを完全にサポートしており フェンスで囲まれたコードブロック構文を 使用してコード例を追加できます
便利でしょう? これはFood構造体に関する 追加のコンテクストとなります ドキュメントを再構築して 今の状態を見てみましょう マウスを“Product menu”に動かし “Build Documentation”を選択します
Xcodeはフレームワークそのものと一緒に SlothCreatorのドキュメントを再構築します “Build Documentation”を使用したため このビルドのボタンをクリックすると “Build Documentation”が開き 更新されたドキュメントが表示されます Food構造体のページに直接アクセスして 追加したばかりのコメントを確認してみましょう 幸いなことにXcodeのクイックヘルプ機能で これが可能になります クイックヘルプはシンボルのドキュメントの 概要をソースエディタで表示します
オプションキーを押して Food宣言をクリックします SlothCreatorのユーザーは自分のコードで Food構造体へのリファレンスをクリックし 同じビューを開くことができます 先程書いたコメントは 要約・ディスカッションセクションにあります 概要より詳しく見たい場合はXcode 13の “Open in Developer Documentation”を使用します
マウスを動かしてクイックヘルプの右下の “Open in Developer Documentation”を クリックすると“Documentation”が そのシンボルのページに 直接表示されます このように SlothCreatorで ドキュメントされていない シンボルが他に1つあります マウスをXcodeのナビゲーターに動かし Slothファイルを開きアイテムをクリックします 下にスクロールすると“Eat”メソッドに ドキュメントコメントがいるとわかります ではメソッドをドキュメントするための 最善の方法を説明します
同じ方法で メソッドの宣言の上に 3つのスラッシュのコメントを追加し ドキュメントの概要テキストを追加します パラメータとして渡されると予想されるものも 具体的にドキュメントしましょう
これはパラメータセクションでできます パラメータセクションを追加するには “パラメータ”という単語で始まり メソッドのパラメータ名コロン そしてそのドキュメントが続く マークダウンリストアイテムを記述します 似た方法でリターンセクションを追加できます 今回はリターンの区切り文字の後に コロンと メソッドが返すものを記述します メソッドに複数のパラメータがある場合 単一のパラメーターの区切り文字から 複数のパラメーターの区切り文字に変更します これはパラメータ名が親パラメータ区切り文字の 子として記述される点以外 他のパラメータとほぼ同じように機能します 基本がわかったところで ナマケモノのEatメソッドをドキュメントしましょう 3つのスラッシュで始まるドキュメントコメントを 手動で書き込むことで Food構造体をドキュメントするのと 同じ方法が使えます しかしより複雑なシンボルをドキュメントするので 現在の宣言をドキュメントするのに 最適なテンプレートを挿入できる Xcodeの “Add Documentation”機能を利用します
コマンドキーを押しながら メソッドの宣言をクリックして アクションメニューを開きます 次にアクションメニューの “Add Documentation”をクリックすると メソッドのドキュメントテンプレートが使えます
まずメソッドの概要を入力してから 食べ物と量のパラメータおよび このメソッドがc返すものを説明します 次にコード例とともにディスカッション セクションを追加してドキュメントを完成させます
前回と同様にマウスをProductメニューに移動し “Build Documentation”を選択すると ドキュメントを再作成できます
Xcodeは再度フレームワーク自体と共に ドキュメントを構築します 今回はウィンドウのナビゲーターを使って Sloth構造体に移動します SlothがあるのはこのSlothsトピックグループです Slothページを下にスクロールすると インスタンスメソッドセクションで
メソッドが見つけられ 更新したドキュメントもあります メソッドのインプットとアウトプットが 非常に明確に定義されており ここにも役立つコード例があります ほぼ完成に近付きましたが まだやるべきことがあります このドキュメントを読むだけでは ここで検討する必要のある 他のシンボルについてのコンテキストが不十分です SlothCreatorの管理者として 読者が次に学ぶべき 他のシンボルを集めたいと思います Xcode 13の新機能に ドキュメント内のシンボルへの紐付けがあります これはフレームワークの様々な部分を つなげ合い 読者を 関連情報へと導くための非常に優れた方法です 2つのダブルクォートを用いた構文を使います 例を見ていきましょう
先程ドキュメントしたSleepメソッドですが バキューム内に存在しません Sloth構造体には別のプロパティがあります
ナマケモノの現在の エネルギーレベルを表す値があります Sleepを呼び出すことの副作用として ナマケモノのエネルギーレベルが 変化することを 読者が理解することが重要だと思います
そこでenergyLevelプロパティを参照して メソッドのディスカッション セクションに追加します
Xcode 13以前は プロパティの名前をバッククォートで囲み 等幅コードフォントを使用していました 現在はダブルクォート構文を使用して リンクを作成できます EnergyLevelへのリンクは非常に簡単でした なぜならそのプロパティは ドキュメントするメソッドの 兄弟であり参照する際と同じだからです Swiftのローカル変数であるためリンクを 親タイプでさらに修飾する必要はありません ただし 異なるタイプの子を参照したい場合は より具体的に書く必要があります ここではHabitat/comfortLevelと書き Habitat構造体の子をリンクしています 完成です Eatメソッドのドキュメントにリンクを追加して 実際の動作を見てみましょう ここに“食べ物を食べる時 ナマケモノの…”と書き energyLevelプロパティへの シンボルリンクを書きます クォートを2つタイプし energyLevelと書き始めます Xcodeのコード補完機能により 正しいリンクを取得できます このアイテムを選択します
そしてエネルギーレベルは “食べ物の…によって増加する”と書き Food構造体の子を参照します ここでまた2つのクォートです Foodとフォワードスラッシュそして energyと書きます
今作成した2つのシンボルリンクにより 読者がこのメソッドの コンテキストを理解しやすくなるでしょう これらのリンクはクイックヘルプでも利用可能です オプションキーを押しながら メソッドの宣言をクリックし クイックヘルプを開きます 先程追加したディスカッション セクションには2つのリンクがあります いずれかをクリックすると Documentationウィンドウの 参照されたシンボルのページに移動します SlothCreatorのすべてのパブリックAPIについて ドキュメントコメントが書けたので 次は同僚と共有したり Webで公開したいと思います これはXcodeが全ドキュメント ビルドの一部として出力する ドキュメントアーカイブを介して行えます ドキュメントアーカイブにはWeb共有に使用できる 単一ページのWeb Appが含まれています 詳細は同僚のデイビッドによる動画 「DocCドキュメントのホスト と自動化」をご覧ください。 役立つ内容満載です
XcodeはDocumentationウィンドウからの直接の ドキュメントエクスポートと インポートにも対応します 実際にやってみましょう ウィンドウのNavigatorにマウスを移動し DocumentationからSlothCreatorをエクスポート フレームワークのアイテムにマウスを持っていくと コンテキストメニューアイコンが表示されます クリックするとエクスポートできます
デスクトップに保存します これで完了です 同僚に送信する準備ができました アーカイブをダブルクリックすると XcodeのDocumentationウィンドウで開きます 私はSlothCreatorをすでに知っているので 別のドキュメントアーカイブを開きたいと思います このところSlothCreatorに コマンドラインインターフェイスを 追加できたらいいとチームで話していました するとArgumentParserというオープンソースの フレームワークが良いという話になりました ArgumentParserの最新 ドキュメントアーカイブが あるので開いてみましょう ドキュメントアーカイブをダブルクリックすると このようにすぐ学習を開始します ドキュメントは長続きする 優れた フレームワークの開発において重要です ソースに直接ドキュメントを書くことは 便利であると共に大きな力を発揮します DocCが加わった新しいXcode 13なら 優れたドキュメントを書くほど 様々な形でその恩恵が得られます
WWDCでは他の動画でも 新たなレベルのドキュメント方法を紹介しています 「XcodeにおけるDocCドキュメントの レベルの向上」では セッションを中断したところから再開し ドキュメントカタログを追加して より適切に整理する方法を説明しています 「DocCドキュメントのホストと自動化」では 先述の通り ドキュメントビルドを既存の 継続的設定に統合する方法と ドキュメントをオンラインでホストする 方法について説明します
フレームワークの より複雑な部分について ステップ別の詳しい説明が見たい場合は 「DocCを使ったインタラクティブな チュートリアルの制作」を ご覧ください この部分に特化した内容となっています
ご視聴ありがとうございました [パーカッション音楽]
-
-
9:34 - Existing comments in code
// A model representing a sloth. public struct Sloth { // ... }
-
10:05 - Writing documentation comments
/// A model representing a sloth. public struct Sloth { // ... }
-
10:22 - Writing block-style documentation comments
/** A model representing a sloth. */ public struct Sloth { // ... }
-
11:34 - Documenting the Food struct
/// Food that a sloth can consume. /// /// Sloths love to eat the leaves and twigs they find in the rainforest canopy as they /// slowly move around. To feed them these items, you can use the `twig`, /// `regularLeaf` and `largeLeaf` default foods. /// /// ```swift /// superSloth.eat(.twig) /// ``` public struct Food { // ... }
-
13:58 - Documenting the Sloth.sleep(in:for:) method
/// A model representing a sloth. public struct Sloth { /// Sleep in the specified habitat for a number of hours. /// /// - Parameters: /// - habitat: The location for the sloth to sleep. /// - numberOfHours: The number of hours for the sloth to sleep. /// - Returns: The sloth’s energy level after sleeping. mutating public func sleep(in habitat: Habitat, for numberOfHours: Int = 12) -> Int { energyLevel += habitat.comfortLevel * numberOfHours return energyLevel } }
-
15:39 - Documenting the Sloth.eat(_:quantity:) method
/// A model representing a sloth. public struct Sloth { /// Eat the provided specialty sloth food. /// /// Sloths love to eat while they move very slowly through their rainforest habitats. They /// are especially happy to consume leaves and twigs, which they digest over long periods /// of time, mostly while they sleep. /// /// ```swift /// let flower = Sloth.Food(name: "Flower Bud", energy: 10) /// superSloth.eat(flower) /// ``` /// /// - Parameters: /// - food: The food for the sloth to eat. /// - quantity: The quantity of the food for the sloth to eat. /// - Returns: The sloth's energy level after eating. mutating public func eat(_ food: Food, quantity: Int = 1) -> Int { energyLevel += food.energy * quantity return energyLevel } }
-
17:46 - Adding symbol links to the documentation for Sloth.sleep(in:for:)
/// A model representing a sloth. public struct Sloth { /// The energy level of the sloth. public var energyLevel: EnergyLevel /// Sleep in the specified habitat for a number of hours. /// /// Each time the sloth sleeps, their ``energyLevel`` increases every hour by the /// habitat's ``Habitat/comfortLevel``. /// /// - Parameters: /// - habitat: The location for the sloth to sleep. /// - numberOfHours: The number of hours for the sloth to sleep. /// - Returns: The sloth’s energy level after sleeping. mutating public func sleep(in habitat: Habitat, for numberOfHours: Int = 12) -> Int { energyLevel += habitat.comfortLevel * numberOfHours return energyLevel } }
-
18:44 - Adding symbol links to the documentation for Sloth.eat(_:quantity:)
/// A model representing a sloth. public struct Sloth { /// Eat the provided specialty sloth food. /// /// Sloths love to eat while they move very slowly through their rainforest habitats. They /// are especially happy to consume leaves and twigs, which they digest over long periods /// of time, mostly while they sleep. /// /// ```swift /// let flower = Sloth.Food(name: "Flower Bud", energy: 10) /// superSloth.eat(flower) /// ``` /// /// When they eat food, a sloth's ``energyLevel`` increases by the food's /// ``Food/energy``. /// /// - Parameters: /// - food: The food for the sloth to eat. /// - quantity: The quantity of the food for the sloth to eat. /// - Returns: The sloth's energy level after eating. mutating public func eat(_ food: Food, quantity: Int = 1) -> Int { energyLevel += food.energy * quantity return energyLevel } }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。