この一連のチュートリアルでは、動作する 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 暗号化されたサーバーが必要です。
SSL 証明書で localhost を使用することもできます。ローカル開発用の証明書を作成する必要がある場合は、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-envsource .classroom-addon-env/bin/activate
ダウンロードした例の各チュートリアル サブディレクトリに requirements.txt があります。pip を使用すると、必要なライブラリをすばやくインストールできます。最初のチュートリアルに必要なライブラリをインストールするには、次のコマンドを使用します。
cd flask/01-basic-apppip install -r requirements.txt
Node.js
Node.js の例では、Express フレームワークを使用します。完全なソースコードは、提供されているリンクからダウンロードできます 。
この例では、Node.js v16.13 以降が必要です。
npm を使用して、必要な Node モジュールをインストールします。
npm installJava
Java の例では、Spring Boot フレームワークを使用します。完全なソースコードは、提供されているリンクからダウンロードできます 。
マシンに Java 11 以降がインストールされていない場合は、インストールします。
Spring Boot アプリケーションでは、Gradle または Maven を使用してビルドを処理し、依存関係を管理できます。この例には Maven ラッパーが含まれています。これにより、Maven 自体をインストールしなくてもビルドを成功させることができます。
プロジェクトをダウンロードまたはクローンしたディレクトリで次のコマンドを実行して、プロジェクトを実行するための前提条件が満たされていることを確認します。
java --version./mvnw --version
Windows の場合:
java -versionmvnw.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 しないように、.gitignore ファイルに *.pem が含まれていることを確認してください。
サーバーを起動する
次のコマンドを使用してアプリケーションを実行できます。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 -installmkcert -pkcs12 -p12-file <path_to_keystore> <domain_name>
この例では、キーストア ファイルが resources ディレクトリに含まれています。任意の場所に保存できますが、それに応じて application.properties ファイルのパスを更新してください。ドメイン名は、プロジェクトを実行するドメインです(例: localhost)。
ファイルを git に commit しないように、.gitignore ファイルに *.p12 が含まれていることを確認してください。
サーバーを起動する
Application.java ファイルで main メソッドを実行して、サーバーを起動します。たとえば、IntelliJ で
Application.java を右クリックして Run 'Application' を選択するか、
src/main/java/com/addons/spring ディレクトリの Application.java ファイルを開いて main(String[] args)
メソッド シグネチャの左にある緑色の矢印をクリックします。または、ターミナル ウィンドウでプロジェクトを実行することもできます。
./mvnw spring-boot:runWindows の場合:
mvnw.cmd spring-boot:runこれにより、https://localhost:5000 または application.properties で指定したポートでサーバーが起動します。