くりにっき

フルスタックキュアエンジニアです

Google App Engine上でgroovyスクリプトを動かす「GAErminal」を作りました #gaeja #nanohack

リリカルハッカソン で作っていたものを正式公開しました。

概要

GAE(Google App Engine) + Terminal = GAErminal (読み方:がーみなる)

Google App Engine上でgroovyスクリプトを動かすことができます
https://github.com/sue445/gaerminal

サンプル

f:id:sue445:20130420175006p:plain

利用用途

  • production環境上でモンキースクリプトを動かす
    • コード修正→随時デプロイだと効率が悪い
      • デプロイに数分かかる
      • デプロイすると上がってたインスタンスが全部落ちるので再度spin-upが走る
      • デプロイは1日1000回までしかできない
    • コンソール上で直接スクリプトを実行できると試行しやすい
    • 使い捨てのコードでテストを書くのはさすがにしんどいですよねw
  • Datastoreからのデータ抽出
    • がっつりプログラムを書くほどではないけどadmin consoleのGQLで抽出するにはしんどい場合とか
  • production環境上のデータ不整合を直接修正する

インストール

mavenを使ってるならpom.xml

<dependency>
    <groupId>net.sue445</groupId>
    <artifactId>gaerminal</artifactId>
    <version>0.0.1</version>
</dependency>

gradleならbuild.gradleに

dependencies {
    compile 'net.sue445:gaerminal:0.0.1'
}

を書くのが手っ取り早いです。

mavenもgradleも使ってなくてjarが個別で欲しい場合は
Maven Central Repositoryからダウンロードしてください(別途groovy.jarも必要)

設定

web.xmlに下記を追記してください

<web-app>

    <filter>
        <filter-name>GaerminalController</filter-name>
        <filter-class>net.sue445.gaerminal.filter.GaerminalController</filter-class>
        <init-param>
            <param-name>pathPrefix</param-name>
            <param-value>/gaerminal/</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>GaerminalController</filter-name>
        <url-pattern>/gaerminal/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

    <security-constraint>
        <web-resource-collection>
            <url-pattern>/gaerminal/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
</web-app>
  • <security-constraint>で認証をかけないとパスを知ってればアクセスできる状態になるので絶対に忘れないでください!
  • slim3を使ってる場合はFrontControllerよりも前にGaerminalControllerを書いてください
        <filter-mapping>
                <filter-name>GaerminalController</filter-name>
                <url-pattern>/gaerminal/*</url-pattern>
                <dispatcher>REQUEST</dispatcher>
        </filter-mapping>

        <filter-mapping>
                <filter-name>FrontController</filter-name>
                <url-pattern>/*</url-pattern>
                <dispatcher>REQUEST</dispatcher>
                <dispatcher>FORWARD</dispatcher>
                <dispatcher>INCLUDE</dispatcher>
                <dispatcher>ERROR</dispatcher>
        </filter-mapping>

あとはローカルでサーバを起動して http://localhost:8888/gaerminal/ とアクセスして冒頭の画面が出れば成功です。

仕様

  • Grooxyの言語仕様に準じます。(早い話Javaならなんでも動きます)
    • セミコロンは不要
    • mainも不要
    • java.lang.* の他に java.io.* や java.util.* 辺りもデフォルトでimportされます
    • System.out.println は println でOK
  • ktrwjrCNMV と違ってwar配下への静的ファイルは不要
  • Google App Engine上で」とあるけど、appengineには依存してないのでJavaのwebアプリ上であればなんでも動くことに今更気づいたw

参考書籍

プログラミングGROOVY

プログラミングGROOVY