この一連のチュートリアルでは、動作する Classroom アドオンのすべての構成要素について説明します。各チュートリアル ステップでは、特定のコンセプトを取り上げ、単一のウェブ アプリケーションに実装します。このガイドは、機能するアドオンの設定、構成、起動を支援することを目的としています。
アドオンは Google Cloud プロジェクトとやり取りする必要があります。Google Cloud に慣れていない場合は、スタートガイドを読むことをおすすめします。認証情報、API アクセス、Google Workspace Marketplace SDK は、Google Cloud コンソールで管理します。Marketplace SDK の詳細については、Google Workspace Marketplace のリスティングのガイドページをご覧ください。
このガイドの内容は次のとおりです。
- Google Cloud を使用して、Classroom の iframe に表示するページを作成します。
- Google シングル サインオン(SSO)を追加して、ユーザーがログインできるようにします。
- API 呼び出しを行って、アドオンを課題に添付します。
- アドオンの送信に関する主な要件と必須の機能に対応します。
このガイドは、プログラミングと基本的なウェブ開発のコンセプトを理解していることを前提としています。チュートリアルを開始する前に、プロジェクト構成ガイドを読むことを強くおすすめします。このページには、チュートリアルで十分に説明されていない重要な構成の詳細が記載されています。
実装の例
完全なリファレンス例は Python で入手できます。部分的な実装は Java と Node.js でも利用できます。これらの実装は、以降のページにあるコード例のソースです。
ダウンロード場所
Python と Java のサンプルは、GitHub リポジトリで入手できます。
Node.js サンプルは zip ファイルとしてダウンロードできます。
前提条件
新しいアドオン プロジェクトを準備するには、以下のセクションをご覧ください。
HTTPS 証明書
アプリは任意の開発環境でホストできますが、Classroom アドオンは https://
を介してのみ利用できます。そのため、アプリをデプロイしたり、アドオンの iframe 内でテストしたりするには、SSL 暗号化されたサーバーが必要です。
localhost
は SSL 証明書で使用できます。ローカル開発用の証明書を作成する必要がある場合は、mkcert の使用を検討してください。
Google Cloud プロジェクト
これらの例で使用する Google Cloud プロジェクトを構成する必要があります。開始に必要な手順の概要については、 Google Cloud プロジェクトの作成ガイドをご覧ください。最初のチュートリアルの Google Cloud プロジェクトを設定するセクションでは、実行する具体的な構成アクションについても説明します。
完了したら、OAuth 2.0 クライアント ID を JSON ファイルとしてダウンロードします。この認証情報ファイルを解凍したサンプル ディレクトリに追加する必要があります。具体的な場所については、ファイルを理解するをご覧ください。
OAuth 認証情報
新しい OAuth 認証情報を作成する手順は次のとおりです。
- Google Cloud の認証情報ページに移動します。画面上部で正しいプロジェクトが選択されていることを確認します。
- [認証情報を作成] をクリックし、プルダウンから [OAuth クライアント ID] を選択します。
- 次のページで、以下の操作を行います。
- [アプリケーションの種類] を [ウェブ アプリケーション] に設定します。
- [承認済みのリダイレクト URI] の下の [URI を追加] をクリックします。アプリケーションのコールバック ルートのフルパスを追加します。たとえば、
https://my.domain.com/auth-callback
やhttps://localhost:5000/callback
です。このルートの作成と処理は、このチュートリアルの後半で行います。このようなルートはいつでも編集または追加できます。 - [作成] をクリックします。
- 新しく作成された認証情報を含むダイアログが表示されます。[JSON をダウンロード] オプションを選択します。ダウンロードした JSON ファイルをサーバー ディレクトリにコピーします。
言語固有の前提条件
前提条件の最新のリストについては、各リポジトリの README ファイルをご覧ください。
Python
Python の例では、Flask フレームワークを使用します。完全なソースコードは、提供されているリンクからダウンロードできます。
必要に応じて、Python 3.7 以降をインストールし、pip
が使用可能であることを確認します。
python3 -m ensurepip --upgrade
新しい Python 仮想環境を設定して有効にすることもおすすめします。
python3 -m venv .classroom-addon-env
source .classroom-addon-env/bin/activate
ダウンロードした例の各チュートリアル サブディレクトリには、requirements.txt
があります。pip
を使用すると、必要なライブラリをすばやくインストールできます。次のコマンドを使用して、最初のチュートリアルに必要なライブラリをインストールします。
cd flask/01-basic-app
pip install -r requirements.txt
Node.js
Node.js の例では、Express フレームワークを使用しています。完全なソースコードは、提供されているリンクからダウンロードできます。
この例では、Node.js v16.13 以降が必要です。
npm
を使用して必要なノード モジュールをインストールします。
npm install
Java
Java の例では、Spring Boot フレームワークを使用しています。完全なソースコードは、提供されているリンクからダウンロードできます。
マシンに Java 11 以降がインストールされていない場合は、インストールします。
Spring Boot アプリケーションは、Gradle または Maven を使用してビルドを処理し、依存関係を管理できます。この例には、Maven 自体をインストールしなくてもビルドを成功させる Maven ラッパーが含まれています。
プロジェクトをダウンロードまたはクローン作成したディレクトリで、次のコマンドを実行して、プロジェクトを実行するための前提条件が満たされていることを確認します。
java --version
./mvnw --version
Windows の場合:
java -version
mvnw.cmd --version
ファイルを理解する
以降のセクションでは、サンプル ディレクトリのレイアウトについて説明します。
ディレクトリ名
各リポジトリには、/01-basic-app/
など、名前が数字で始まる複数のディレクトリが含まれています。番号は特定のチュートリアル ステップに対応しています。各ディレクトリには、特定のチュートリアルで説明されている機能を実装する、完全に機能するウェブアプリが含まれています。たとえば、/01-basic-app/
ディレクトリには、アドオンを作成するチュートリアルの最終的な実装が含まれています。
ディレクトリの内容
ディレクトリの内容は実装言語によって異なります。
Python
ディレクトリ ルートには次のファイルが含まれています。
main.py
- Python アプリケーションのエントリ ポイント。このファイルで使用するサーバー構成を指定し、実行してサーバーを起動します。requirements.txt
- ウェブアプリの実行に必要な Python モジュール。これらはpip install -r requirements.txt
を使用して自動的にインストールできます。client_secret.json
- Google Cloud からダウンロードしたクライアント シークレット ファイル。これはアーカイブの例には含まれていません。ダウンロードした認証情報ファイルの名前を変更して、各ディレクトリのルートにコピーする必要があります。
config.py
- Flask サーバーの構成オプション。webapp
ディレクトリには、ウェブ アプリケーションのコンテンツが含まれています。次のツールが含まれています。さまざまなページの Jinja テンプレートを含む
/templates/
ディレクトリ。画像、CSS、補助的な JavaScript ファイルを含む
/static/
ディレクトリ。routes.py
- ウェブ アプリケーション ルートのハンドラ メソッド。__init__.py
-webapp
モジュールのイニシャライザ。このイニシャライザは Flask サーバーを起動し、config.py
で設定された構成オプションを読み込みます。特定のチュートリアル ステップで必要な追加ファイル。
Node.js
ウォークスルーの各ステップは、それぞれの <step>
サブフォルダにあります。各ステップには次のものが含まれます。
- JavaScript、CSS、画像などの静的ファイルは
./<step>/public
フォルダにあります。 - Express ルーターは
./<step>/routes
フォルダにあります。 - HTML テンプレートは
./<step>/views
フォルダにあります。 - サーバー アプリケーションは
./<step>/app.js
です。
Java
プロジェクト ディレクトリには、次のものが含まれます。
src.main
ディレクトリには、アプリケーションを正常に実行するためのソースコードと構成が含まれています。このディレクトリには、次のものが含まれます。 +java.com.addons.spring
ディレクトリには、Application.java
ファイルとController.java
ファイルが含まれています。Application.java
ファイルはアプリケーション サーバーの実行を担当し、Controller.java
ファイルはエンドポイント ロジックを処理します。+resources
ディレクトリには、HTML ファイルと JavaScript ファイルを含むtemplates
ディレクトリが含まれています。また、サーバーを実行するポート、キーストア ファイルのパス、templates
ディレクトリのパスを指定するapplication.properties
ファイルも含まれています。この例では、キーストア ファイルをresources
ディレクトリに含めています。任意の場所に保存できますが、それに応じてapplication.properties
ファイルのパスを更新してください。pom.xml
には、プロジェクトのビルドに必要な情報と、必要な依存関係の定義が含まれています。.gitignore
には、git にアップロードすべきでないファイル名が含まれています。この.gitignore
にキーストアへのパスを追加してください。提供されている例では、これはsecrets/*.p12
です(キーストアの目的については、以下のセクションで説明します)。チュートリアル 2 以降では、リモート リポジトリにシークレットを含めないように、client_secret.json
ファイルへのパスも指定する必要があります。チュートリアル 3 以降では、H2 データベース ファイルとファイル データストア ファクトリのパスを追加する必要があります。これらのデータストアの設定について詳しくは、リピート訪問の処理に関する 3 つ目のチュートリアルをご覧ください。mvnw
とmvnw.cmd
は、それぞれ Unix と Windows の Maven ラッパー実行可能ファイルです。たとえば、Unix で./mvnw --version
を実行すると、Apache Maven のバージョンなどの情報が出力されます。.mvn
ディレクトリには、Maven ラッパーの構成が含まれています。
サンプル サーバーを実行する
テストするには、サーバーを起動する必要があります。次の手順に沿って、任意の言語でサンプルサーバーを実行します。
Python
Oauth 認証情報
前述のとおり、OAuth 認証情報を作成してダウンロードします。JSON ファイルを、アプリケーションのサーバー起動ファイルとともにルート ディレクトリに配置します。
サーバーを構成する
ウェブサーバーを実行する方法はいくつかあります。Python ファイルの末尾に、次のいずれかを追加します。
保護されていない
localhost
。これはブラウザ ウィンドウで直接テストする場合にのみ適しています。保護されていないドメインは Classroom アドオンの iframe に読み込むことはできません。if __name__ == "__main__": # Disable OAuthlib's HTTPs verification. os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" # Run the web app at http://localhost:5000. app.run(debug=True)
localhost
を保護します。ssl_context
引数には、SSL 鍵ファイルのタプルを指定する必要があります。if __name__ == "__main__": # Run the web app at https://localhost:5000. app.run(host="localhost", ssl_context=("localhost.pem", "localhost-key.pem"), debug=True)
Gunicorn サーバー。これは、本番環境対応のサーバーまたはクラウド デプロイに適しています。この起動オプションで使用する
PORT
環境変数を設定することをおすすめします。if __name__ == "__main__": # Run the web app at https://<your domain>:<server_port>. # Defaults to https://<your domain>:8080. server_port = os.environ.get("PORT", "8080") app.run(debug=True, port=server_port, host="0.0.0.0")
サーバーを起動する
Python アプリケーションを実行して、前の手順で構成したサーバーを起動します。
python main.py
表示された URL をクリックしてブラウザでウェブアプリを表示し、正しく実行されていることを確認します。
Node.js
サーバーを構成する
HTTPS でサーバーを実行するには、HTTPS でアプリケーションを実行するために使用される自己証明書を作成する必要があります。これらの認証情報は、リポジトリのルートフォルダに sslcert/cert.pem
と sslcert/key.pem
として保存する必要があります。ブラウザでこれらのキーを受け入れるには、OS のキーチェーンにキーを追加する必要がある場合があります。
ファイルを git に commit しないように、*.pem
が .gitignore
ファイルにあることを確認します。
サーバーを起動する
次のコマンドを実行してアプリケーションを実行できます。step01
は、サーバーとして実行する正しいステップに置き換えます(たとえば、01-basic-app の場合は step01
、02-sign-in の場合は step02
)。
npm run step01
または
npm run step02
これにより、https://localhost:5000
でウェブサーバーが起動します。
ターミナルで Control + C
を使用してサーバーを終了できます。
Java
サーバーを構成する
HTTPS でサーバーを実行するには、HTTPS でアプリケーションを実行するために使用される自己証明書を作成する必要があります。
ローカル開発には mkcert の使用を検討してください。mkcert
をインストールすると、次のコマンドで HTTPS 経由で実行するローカル保存証明書が生成されます。
mkcert -install
mkcert -pkcs12 -p12-file <path_to_keystore> <domain_name>
この例では、キーストア ファイルを resources ディレクトリに含めています。保存場所は任意ですが、application.properties
ファイルのパスを適宜更新してください。ドメイン名は、プロジェクトを実行するドメインです(例: localhost
)。
ファイルを git に commit しないように、*.p12
が .gitignore
ファイルにあることを確認します。
サーバーを起動する
Application.java
ファイルの main
メソッドを実行して、サーバーを起動します。たとえば、IntelliJ では、src/main/java/com/addons/spring
ディレクトリで Application.java
> Run 'Application'
を右クリックするか、Application.java
ファイルを開いて main(String[] args)
メソッド シグネチャの左にある緑色の矢印をクリックします。または、ターミナル ウィンドウでプロジェクトを実行することもできます。
./mvnw spring-boot:run
Windows の場合
mvnw.cmd spring-boot:run
これにより、https://localhost:5000
または application.properties
で指定したポートでサーバーが起動します。