Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 12654] ファイルの概要

このコミットは、Goプロジェクトのダッシュボードから古いPythonベースのパッケージダッシュボードを削除し、プロジェクトページをウェブサイトのルートに配置するように変更するものです。これにより、ダッシュボードの構成が簡素化され、パッケージ関連の機能が別の場所(おそらくbuild.golang.orgのような専用のビルドシステム)に移行されたことを示唆しています。

コミット

commit e9f82e6b688abd4840f761c7c61910fecc9f2915
Author: Andrew Gerrand <adg@golang.org>
Date:   Fri Mar 16 08:20:02 2012 +1100

    misc/dashboard: remove old python package dashboard
    
    This leaves only the project page, which now resides at the web root.
    
    R=golang-dev, bsiegert, rsc
    CC=golang-dev
    https://golang.org/cl/5833044

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/e9f82e6b688abd4840f761c7c61910fecc9f2915

元コミット内容

misc/dashboard: 古いPythonパッケージダッシュボードを削除します。 これにより、プロジェクトページのみが残り、現在はウェブのルートに配置されます。

変更の背景

この変更の背景には、Goプロジェクトのウェブサイトにおけるダッシュボード機能の再編があります。以前は「パッケージダッシュボード」と「プロジェクトページ」という2つの主要な機能が存在していたと考えられます。コミットメッセージから、「古いPythonパッケージダッシュボード」が削除され、「プロジェクトページ」がウェブサイトのルート(/)に移動されたことがわかります。

これは、以下のような理由が考えられます。

  • 機能の統合または分離: パッケージのビルド状況やインストール統計を表示する機能が、Goの公式ビルドシステム(build.golang.orgなど)に統合されたか、あるいはその役割が縮小された可能性があります。これにより、メインのウェブサイトからはプロジェクトの紹介に特化する形になったと考えられます。
  • 技術スタックの整理: 古いPythonベースのダッシュボードが、メンテナンスコストや技術的な負債となっていた可能性があります。Go言語自体のエコシステムが成熟するにつれて、Goで書かれたツールやサービスへの移行が進んだのかもしれません。
  • ユーザーエクスペリエンスの改善: ウェブサイトのルートに直接プロジェクトページを配置することで、ユーザーがGo関連のプロジェクトをより簡単に見つけられるようにした可能性があります。

特に、削除されたmain.htmlには「The build status dashboard has moved to http://build.golang.org」というコメントが含まれており、パッケージダッシュボードの機能がbuild.golang.orgに移行したことが明確に示されています。

前提知識の解説

  • Go Dashboard: Go言語プロジェクトに関連する様々な情報(ビルドステータス、パッケージ情報、プロジェクト一覧など)を提供するウェブアプリケーションの総称。
  • Google App Engine (GAE): Googleが提供するPaaS(Platform as a Service)。ウェブアプリケーションを開発・ホストするためのプラットフォームで、Python、Java、Goなどの言語をサポートしていました。このコミット当時のGo Dashboardは、Python 2.xランタイム上で動作していたことがファイル構成から推測されます。
  • app.yaml: Google App Engineアプリケーションの設定ファイル。URLルーティング、ハンドラ、環境変数などを定義します。
  • webappフレームワーク: Google App EngineのPython 2.x標準環境でよく使われた軽量なウェブアプリケーションフレームワーク。リクエストハンドラを定義し、URLパスとPythonスクリプトをマッピングするために使用されました。
  • templateモジュール: Google App EngineのPython 2.xでテンプレートレンダリングに使用されたモジュール。HTMLファイルとデータを組み合わせて動的なウェブページを生成します。
  • パッケージダッシュボード: Go言語のサードパーティパッケージのインストール数、ビルド状況、情報などを表示する機能。
  • プロジェクトページ: Go言語で開発された、またはGo言語に関連するプロジェクトの一覧や詳細を表示する機能。

技術的詳細

このコミットは、Go Dashboardのアーキテクチャにおいて、Pythonベースの「パッケージダッシュボード」機能を完全に削除し、「プロジェクトページ」をウェブサイトの主要なエントリポイントとして再構成するものです。

具体的な技術的変更点は以下の通りです。

  1. package.pyとその関連ファイルの削除:

    • misc/dashboard/godashboard/package.py: パッケージダッシュボードの主要なロジックを実装していたPythonスクリプトが削除されました。これには、パッケージ情報のデータストアモデル(Packageクラス)、日次メンテナンス処理、パッケージ情報の記録、JSON形式での出力などが含まれていました。
    • misc/dashboard/godashboard/package.html: パッケージダッシュボードの表示に使用されていたHTMLテンプレートが削除されました。
    • misc/dashboard/godashboard/main.html: 以前のウェブサイトのルートページ(ビルドステータスを表示し、パッケージダッシュボードへのリンクを提供していた)が削除されました。このファイルには、ビルドステータスダッシュボードがbuild.golang.orgに移動したことを示すメッセージが含まれていました。
    • misc/dashboard/godashboard/auth.py, misc/dashboard/godashboard/const.py (一部), misc/dashboard/godashboard/cron.yaml, misc/dashboard/godashboard/fail-notify.txt, misc/dashboard/godashboard/key.py.dummy, misc/dashboard/godashboard/_multiprocessing.py: これらはパッケージダッシュボードの認証、定数、cronジョブ、エラー通知、秘密鍵のダミー、マルチプロセッシング関連のユーティリティファイルであり、パッケージダッシュボードの削除に伴い不要となったため削除されました。
  2. app.yamlのルーティング変更:

    • 以前は/package/といったURLパスがpackage.pymain.htmlにマッピングされていましたが、これらが削除されました。
    • 新しいapp.yamlでは、ウェブサイトのルートパス(/)および/project/project/login/project/editといったパスが、新しく追加(または大幅に書き換え)されたproject.pyスクリプトにルーティングされるようになりました。これにより、プロジェクトページがウェブサイトの主要なコンテンツとして機能するようになります。

    変更前:

    - url: /package
      script: package.py
    - url: /package/daily
      script: package.py
      login: admin
    - url: /project.*
      script: package.py
    - url: /
      static_files: main.html
      upload: main.html
    

    変更後:

    - url: /(|project(|/login|/edit))
      script: project.py
    

    この変更は、正規表現/(|project(|/login|/edit))//project/project/login/project/editのいずれのパスにもマッチし、これらすべてをproject.pyで処理することを示しています。

  3. project.pyの追加/再構築:

    • project.pyという新しいファイルが追加されました。このファイルは、プロジェクトページの表示、プロジェクトの追加、編集、承認などのロジックを担います。
    • 以前のpackage.pyが持っていたProjectモデルや関連する処理の一部が、この新しいproject.pyに移行された可能性があります。特に、Projectモデルの定義や、プロジェクトのリスト表示、編集、保存、削除、メール通知などの機能が実装されています。
    • project-edit.htmlproject.htmlも、古いパッケージダッシュボードへのリンクを削除し、新しいルーティングに合わせて調整されました。

これらの変更により、Go Dashboardは、パッケージ関連の動的な情報提供から、Goプロジェクト自体の紹介と管理に焦点を移したことがわかります。

コアとなるコードの変更箇所

  • misc/dashboard/godashboard/app.yaml: URLルーティングの定義が大幅に変更され、古いパッケージダッシュボード関連のパスが削除され、新しいproject.pyがウェブサイトのルートとプロジェクト関連のパスを処理するように設定されました。
  • misc/dashboard/godashboard/package.py: このファイル全体が削除されました。これは、古いPythonパッケージダッシュボードの主要なバックエンドロジックを担っていました。
  • misc/dashboard/godashboard/package.html: このファイル全体が削除されました。これは、古いパッケージダッシュボードのフロントエンドテンプレートでした。
  • misc/dashboard/godashboard/main.html: このファイル全体が削除されました。これは、以前のウェブサイトのルートページでした。
  • misc/dashboard/godashboard/project.py: このファイルが新規追加(または大幅に書き換え)されました。プロジェクトページの表示と管理に関するすべてのロジックがここに集約されました。

コアとなるコードの解説

app.yamlの変更

--- a/misc/dashboard/godashboard/app.yaml
+++ b/misc/dashboard/godashboard/app.yaml
@@ -11,16 +11,5 @@ handlers:
 - url: /static
   static_dir: static
 
-- url: /package
-  script: package.py
-
-- url: /package/daily
-  script: package.py
-  login: admin
-
-- url: /project.*
-  script: package.py
-
-- url: /
-  static_files: main.html
-  upload: main.html
+- url: /(|project(|/login|/edit))
+  script: project.py

この差分は、app.yamlにおけるURLルーティングの根本的な変更を示しています。

  • - url: /package- url: / など、以前のパッケージダッシュボードやメインページに関連するハンドラがすべて削除されています。
  • 新しく追加された - url: /(|project(|/login|/edit)) は、正規表現を使用して、ウェブサイトのルートパス (/)、/project/project/login/project/edit のすべてのリクエストを project.py スクリプトで処理するように設定しています。これにより、プロジェクトページがウェブサイトの主要なコンテンツとして機能するようになりました。

package.pyの削除

package.pyは、Goパッケージのインストール統計、ビルド状況、パッケージ情報の管理など、パッケージダッシュボードのバックエンドロジックをすべて含んでいました。このファイルの削除は、パッケージダッシュボード機能がGo Dashboardから完全に切り離されたことを意味します。

project.pyの追加

project.pyは、プロジェクトのデータモデル(Projectクラス)、プロジェクトのリスト表示、新規プロジェクトの追加、既存プロジェクトの編集・削除、管理者による承認機能などを実装しています。このファイルがウェブサイトの新しいエントリポイントとなり、Go関連プロジェクトの情報を一元的に管理・表示する役割を担います。

例えば、ProjectPageクラスのgetメソッドは、リクエストパスに応じてプロジェクトの一覧表示 (self.list())、ログイン (/project/login)、編集 (/project/edit) などの処理を振り分けています。postメソッドは、新しいプロジェクトの登録や既存プロジェクトの更新を処理します。

関連リンク

参考にした情報源リンク