サーバーレスWebAPI開発に入門できました
前回の記事の続きです。
go-swaggerを使うのをやめて、Ginというフレームワークを使う事で無事入門できました。
Ginフレームワークの使い方はこちらの記事を参考にさせて頂きました。
ソースコードを公開してます。参考になれば幸いです。
GitHub - nns7/serverless-api-go-tutorial
- 開発環境
- DynamoDB Localをローカルにデプロイする
- docker-compose.yml
- APIサーバーをローカルに立てる
- main.go
- db.go
- APIサーバーにリクエストを投げてみる
- ユーザーの登録
- ユーザーの一覧
- ユーザーの更新
- ユーザーの削除
- 参考
サーバーレスWebAPI開発に入門しようとしたけどうまくいかなかった話
AWS DAVの勉強をしていたら、Lambdaを使えばとても簡単にWebAPIが作れてしまうのでは?と感じたので、 ググって最初にヒットしたこちらの記事を参考に、サーバーレスWebAPIを作ろうとしたらうまくいかなかった話です。
なお、Terraformを使ったインフラ構築は特に詰まることも無かったので本記事では触れません。
そもそもWindowsの開発環境で無理やりやっている事が原因だと考えていますが、
Dockerfileの書き方とか色々調べてて勉強になったので書き残しておきます。
記事の内容が間違っているぞということが主旨ではないです。
- 開発環境
- Dockerコンテナ上にGolang開発環境を作る
- フォルダ構成
- Dockerfile
- docker-compose.yml
- curlコマンドを叩くと502が返ってきてお手上げに
- WSL2がホストのメモリを浪費する現象の対策
- 参考
- 開発環境系
- Alpine Linux系
- メモリ浪費の暫定対処系
PlayFrameworkのチュートリアル(挫折版)
HelloWorldを表示したので、次はチュートリアルに沿ってサンプルアプリケーションを組んでみたいところですが、
公式のPlay 2.4のドキュメントには英語のチュートリアルしか無いようなので、
Play 2.2の時の日本語チュートリアルを参考にTODO管理アプリケーションを組んでいきたいと思います。
…って思ってたけど、Taskモデルの準備のところでJavaの書き方がわからず挫折しました!
誰かの参考になるかもなので途中まで書いたものは残しておきます。。。
概要
conf/rotes
ファイルを開きますが、書き方がチュートリアルとちょっと変わっています。
GET / controllers.HomeController.index
が、意味は一緒です。app/contorollers/HomeController.java
を開いてみます。
package controllers; import play.mvc.*; public class HomeController extends Controller { public Result index() { return ok(views.html.index.render()); } }
どうやらindex()
メソッドが動いて、HTMLコンテンツを含む200 OKレスポンスを返しているようです。
HTMLコンテンツとのマッピングはviews.html.(HTMLのファイル名).render()
という書き方になるようです。
次はapp/views/index.scala.html
を開いてみます。
@() @main("Welcome to Play") { <h1>Welcome to Play!</h1> }
ここはチュートリアルと違ってべた書きしてあります。
開発フロー
チュートリアルのようにcontrollersからviewsに値を渡したい場合、どのように書けばよいでしょうか。
まずapp/views/index.scala.html
を開いて次のように書き換えます。
@(message: String) @main("Welcome to Play") { <h1>@message</h1> }
次にapp/contorollers/HomeController.java
を開いて次のように書き換えます。
package controllers; import play.mvc.*; public class HomeController extends Controller { public Result index() { return ok(views.html.index.render("Hello World")); } }
書き換えたらブラウザからlocalhost:9000を開いてみます。
Hello Worldと表示されるはずです。
viewsの一行目に変数を宣言すれば、controllersから引数を渡せることがわかりました。
アプリケーションの準備
conf/rotes
ファイルを編集します。以下の3行を追加します。
# Tasks GET /tasks controllers.HomeController.tasks POST /tasks controllers.HomeController.newTask POST /tasks/:id/delete controllers.HomeController.deleteTask(id: Long)
ブラウザをリロードするとチュートリアルのようにコンパイルエラーが発生する事が確認できます。
次にapp/contorollers/HomeController.java
に以下の行を追加します。
public Result tasks() { return TODO; } public Result newTask() { return TODO; } public Result deleteTask(Long id) { return TODO; }
ブラウザからlocalhost:9090/tasksを開くとTODOが表示されます。
チュートリアルと同じようにindex
アクションが呼び出された時に、tasks
アクションにリダイレクトするようにします。
public Result index() { return redirect(routes.HomeController.tasks()); }
Taskモデルの準備(ここで挫折)
Javaで書く場合はModelクラスを継承したTaskクラスをmodels/Task.java
として実装すれば良さそうでしたが、なんのパッケージのModelクラスをimportすればよいかわからず手詰まりになりました。
感想
ググると日本語の情報はわりとすぐ出てくるのですが、Playのバージョンが2.2の時と2.4の時と2.6の時で若干やり方が違うようで、いい感じに読み替えたり英語のドキュメントにあたるスキルが必要そうだと感じました。 作ってみたいWebアプリケーションはあるので、日本語のチュートリアルが充実している(と思われる)Ruby on Railsに挑戦してみたいと思います。
PlayFrameworkをIntelliJ IDEA CommunityにインポートしてHelloWorld
昔ちょっと触ったPlay Frameworkを使ってアプリを作ってみようと思ったけど、 やり方が昔と変わっててググっても最新の情報がいい感じにまとまってるところが無かったので、 備忘録的にメモしつつ始めてみた。
- 筆者の環境
- インストールするもの
- JDK 8のインストール
- IntelliJ IDEAのインストール
- sbtのインストール
- プロジェクトの作成
- 作成したプロジェクトをIntelliJ IDEAにインポート
- Hello worldしてみる
筆者の環境
Windows 10 Home(64bit)
インストールするもの
JDK 8のインストール
- OracleのサイトからJava SEのダウンロードページへアクセス。
- Java SE 8のJDK Downloadボタンをクリック。
- Java SE Development Kit 8u192と書いてある場所のAccept License Agreementにチェックを入れる。
- Product / File Descriptionの列にWindows x64と書いてある行のDownloadリンクをクリック。
- ダウンロードが完了したらインストーラーを起動。画面の指示に従ってインストール。
- 途中、ライセンス条項の変更ウィンドウが表示されたらOKボタンをクリック。
- コピー先フォルダウィンドウが表示される。変更ボタンから任意のインストール先を選択し、次ボタンをクリック。
- 正常にインストールされましたと表示されたら閉じるボタンをクリック。
- システム環境変数にJAVA_HOMEを追加。筆者の場合は
C:\Program Files\Java\jdk1.8.0_192
とした。 - システム環境変数からPathを選択して設定を追加。
%JAVA_HOME%\bin
を追加。 - インストールが成功しているか確認するためにコマンドプロンプトを起動。以下のコマンドを入力して実行する。
> java -version
次のように表示されたら成功です。
java version "1.8.0_192" Java(TM) SE Runtime Environment (build 1.8.0_192-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
> javac -version javac 1.8.0_192
IntelliJ IDEAのインストール
- JetbrainsのサイトからIntelliJ IDEAのページへアクセス
- 中央のDownloadボタンをクリックするとダウンロードページへ。 Ultimate版かCommunity版かを選ぶページへ移動するので、今回はCommunity版を選択。
- Downloadボタンの横からexeかzipか選べる。特に拘りも無いのでexeを選んでDownloadボタンをクリック。
- ダウンロードが完了したらインストーラーを起動。画面の指示に従ってインストール。 (パスにブランクが入るのがなんか嫌だったので、インストール先をProgram Filesから変更した)
- インストールが完了したら早速起動してみる。
- Complete Installationウィンドウが表示されるので、「Do not import settings」を選択してOKボタンをクリック。 (他の開発環境で使ってた設定をインポートできるっぽい?)
- Jetbrains Privacy Policyウィンドウが表示されるので、Agreementにチェックを入れてContinueボタンをクリック。
- Data Sharingウィンドウが表示される。お好みでSend Usage StattisticsボタンかDon't sendボタンをクリック。
- Set UI themeウィンドウが表示されるので好みのUIを選択してNext: Default pluginsボタンをクリック。
- Default pluginsウィンドウが表示される。必要なプラグインがあればここで選択。自分の場合はよくわからなかったのでそのままNext: Featured pluginsボタンをクリックした。
- Featured pluginsウィンドウが表示される。Play Frameworkの開発にはScalaプラグインが必要みたいなので、このウィンドウでScalaのInstallボタンをクリック。 プログレスバーの表示がInstalledになったらStart using IntelliJ IDEAボタンをクリック。
sbtのインストール
- ダウンロードページへアクセス
- SBT-1.2.7.MSIボタンをクリック
- ダウンロードが完了したらインストーラーを起動。画面の指示に従ってインストール。
- インストールが完了したらFinishボタンをクリック。
- インストールが成功しているか確認するためにコマンドプロンプトを起動。以下のコマンドを入力して実行する。
> cd <sbtがカレントディレクトリ直下にtargetフォルダを作成してしまうので適当なフォルダを作成しておく> > mkdir project > sbt console
次のように表示されたら成功です。
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0 [info] Updated file d:\develop\sbt\project\build.properties: set sbt.version to 1.2.7 [info] Loading project definition from D:\develop\sbt\project [info] Updating ProjectRef(uri("file:/D:/develop/sbt/project/"), "sbt-build")... [info] Done updating. [info] Set current project to sbt (in build file:/D:/develop/sbt/) [info] Updating ... [info] Done updating. [info] Starting scala interpreter... Welcome to Scala 2.12.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_192). Type in expressions for evaluation. Or try :help.
- 次のコマンドを入力してsbtコンソールを終了します。
scala> :quit
プロジェクトの作成
> cd <プロジェクトを配置するディレクトリ>
> sbt new playframework/play-java-seed.g8 This template generates a Play Java project name [play-java-seed]:
プロジェクト名を聞かれるので「helloworld」と入力。organizationは何も入力せずデフォルトのままとした。
name [play-java-seed]: helloworld organization [com.example]: Template applied in D:\develop\play\.\helloworld
作成したプロジェクトをIntelliJ IDEAにインポート
- IntelliJ IDEAを起動。Import Projectを選択。
- インポートするプロジェクトのルートディレクトリを選択。(先程作成したhelloworldプロジェクトを選択する)
- インポートするプロジェクトの種類を聞かれるので、[Import porject from external model]にチェックを入れsbtを選択してNextボタンをクリック。
- Import Projectウィンドウが表示される。Porject JDKのNew...ボタンをクリックしてJDKを選択。
- ディレクトリを選択するウィンドウが表示される。最初にインストールしたJDK 8のインストール先を選択してProject JDKが変更されたらFinishボタンをクリック。
- Tip of the Dayウィンドウが表示されたら[Show tips on startup]のチェックを外してCloseボタンをクリック。
- dump project structure from sbtやらimport to intellij project modelやら表示されるので終わるまで待つ。(結構長い。15分くらい)
Hello worldしてみる
- IntelliJのターミナルを開き、
sbt run
と入力する。 - ブラウザから「http://localhost:9000」にアクセスしてみる。
- Welcome to Play!と表示されたら成功です。お疲れ様でした。