最近の記事

goaでバスの路線図APIを作る(ビュー編)

ビュー実装前回のAPIから取得できるデータを使ったビューを作る。 ビューは地図上に路線図を書くので、leafletを使う。 APIから取れるデータはこんな感じになっていて、 図にするとこんな感じ。 elementをrelationのA→Bの順に繋いでいくと路線経路が引ける様になっている。 このデータをLeaflet用のデータに変換するところを書いて // Geojson型へキャストfunction getCoordinate(c){ return [c.la

    • goaでバスの路線図APIを作る(API編2)

      バックエンド処理前回まででAPIとしてのガワは完成。 このままビルドしても動くのでgoaすごいなって思う。 とはいっても欲しいデータを取れるわけではないので、その部分をコーディングしていく。 具体的には下記赤のところ。 今回はgormを使って赤のところを書いていく。 路線名を受け取るところまでは自動生成されているので、SQLを発行するところを関数で呼び出せる形で作る。 // rosenzu.go// データを受け取るところ(自動生成)// Find implements

      • goaでバスの路線図APIを作る(API編)

        goa design前回のデザインをgoa のdesignに落とし込む。 goaの細かい使い方とかはチュートリアルとか見ながらやった。 デザインファイルにはざっくり下記を書く。 APIの定義 Serviceの定義(ルーティング、メソッド(GET,POST等)、レスポンス等の定義) レスポンスデータの定義 ここの書き方がv1とv3で違いがあり、困った時に調べるのが難しいポイント。 詰まったポイントを下記にまとめる。 CORS設定 CORSを設定しないとブラウザと

        • goaでバスの路線図APIを作る(design編)

          はじめにgoaがAPIを作るのに良いと聞いたので、これを使って何か作ってみようと思う。 goaのチュートリアル見る感じ、以前Webアプリで使ったginとは違った感じのフレームワークなので戸惑いそうではある。 Googleマップとかで電車の路線図はあるのにバスの路線図はあんまり見かけないなと思ったので題材として選んだ。 goagoaはAPIのデザインを書くと、ドキュメントとかコードが生成される便利なやつらしい。 Swaggerでドキュメントからコード生成はやったことあるが、こ

        goaでバスの路線図APIを作る(ビュー編)

          Go学習日誌 #2022/07/08

          実施事項 以下を実施 ・トップページの説明を追加。 ・READMEとLICENSEを更新。 内容はGitHubを参照。 その他 ひと段落したので更新は一旦停止

          Go学習日誌 #2022/07/08

          Go学習日誌 #2022/07/06-07

          生活記録アプリ実施事項 下記を実施 ・Herokuへのアップ ・バグ修正 Herokuへのアップ Herokuへアップロードして下記URLで公開 https://lifelog-app.herokuapp.com/ アップロードにあたって、下記の修正が必要だった。 ・環境変数の変更 ・Postgresqlへの接続方法の変更 基本的に下記のガイドに従って実装すればOKだった。 Herokuへアップする際、go.sumをgitに含めなければいけない。 これを知らずに

          Go学習日誌 #2022/07/06-07

          Go学習日誌 #2022/07/01

          実施事項 なんかバグが残ってたのでその対応をメインにやってました。 ・バグ修正 ・Github公開 Github公開 一旦できたところまでGithubにあげました。 その他 Herokuはアカウント情報を思い出すところから始めました。 携帯変えて認証キーが無くて焦りました。 前の携帯が手元に残っていたのでなんとかなった。

          Go学習日誌 #2022/07/01

          Go学習日誌 #2022/06/30

          バグ修正実施事項 以下のバグを修正 ・他のユーザの予定が編集できてしまう ・未ログイン状態で/lifelogなどに遷移するとステータスコード500が返ってしまう(本来はログイン画面表示または403を返したい 他のユーザの予定が編集できてしまう問題 原因は、ユーザ識別子が被っていたこと。 Auth0の情報のaudが識別子と思っていたが、識別子はsubであるとのこと。 なので、subに変更したら問題が解決した。 未ログイン状態の処理 ginのグループのルーティングとミ

          Go学習日誌 #2022/06/30

          Go学習日誌 #2022/06/27-29

          テスト作成実施事項 ・テスト作成 100% ・Remarksモデルを新たに作成 ・Remarksモデルを一覧表に追加するjavascriptを作成 Remarksモデル 備考欄を生成して、そこにJSONで受け取ったRemarksの内容を表示するjavascriptを作成した。 今までは24:00を無理やり作ってそこに書いていたが、備考欄を自作してみやすくなった。 その他 バグ修正 ・他のユーザの予定が編集できてしまう ・未ログイン状態で/lifelogなどに遷移す

          Go学習日誌 #2022/06/27-29

          Go学習日誌 #2022/06/24

          テスト作成実施事項 テストを60%ほど作った。 変にテストデータが残らない様に、CLI引数でginサーバの環境を切り替えられるようにした。 ついでにテスト用DBをテスト時に初期化して変にデータが残ってテストが変にならないように修正した。 が、これが良くないのかテストが実行できたりできなかったりで変な感じ。 テストが並列実行されてるあたりが怪しいが、最初と最後に1回実行されるBeforeAll/AfterAllの処理を変えただけだから関係ない様にも思う。

          Go学習日誌 #2022/06/24

          Go学習日誌 #2022/06/23

          テスト作成実施事項 テストの作成を30%ほど。 バグも修正しつつで進めているので目立って書くことが無い。 Railsから移ってわかったことは、 Rails -> Gin + Gorm RSpec -> Ginkgo + Gomega Capybara -> Agouti みたいな感じ。 ただ、RSpecみたいにテスト流せばそのままテストされるわけではなく、 自分でGinのサーバ起動させてからテスト流さないとダメっぽい。 システムテストじゃなければ、Specから関数呼べばい

          Go学習日誌 #2022/06/23

          Go学習日誌 #2022/06/22

          テスト作成実施事項 今日は吐き気でダウン気味だったのであまり進捗は無し。 とりあえず以下を実施 ・モデルテストの作成 ・システムテストの作成に着手 モデルテスト作成 残りのモデルのテストを作成した。 システムテスト作成 以前書いた下記のSeleniumを使ったテストを参考にしてみたが、どうにもうまく動かなかった。 色々調べると、Agoutiというのを使うとGinkgoと組み合わせて簡単にテストが書けるらしい。 対応するWebDriverは以下の3つ。 ・Phan

          Go学習日誌 #2022/06/22

          Go学習日誌 #2022/06/21

          テスト作成実施事項 昨日は吐き気凄くてサボりました。 実施事項は下記 ・環境変数を実行環境とテスト環境で分離 ・Userモデルテストを作成 環境変数の分離 DBへの接続関数を以下のように書いていたが、テストする際は.envファイルで接続先のDBを変更する様にしたかった。 Railsでは開発用DBとテスト用DBが切り分けられていたので。。。 func DataBaseConnect() *gorm.DB { env := godotenv.Load() // Load

          Go学習日誌 #2022/06/21

          Go学習日誌 #2022/06/17

          生活記録アプリ実施事項 下記を実施。 ・テスト実施事項の整理 ・単体テスト方法の調査 ・システムテスト方法の調査 調査は昨日終わったんじゃないんかいと思うが、調べていくとRailsのspecみたいに簡単にテストが書けるわけではなく、テストに適したソースコードになっていないとダメそう。 Railsでは、テストDBの作成だったり、システムテストでブラウザを準備するだったりはほぼ勝手にやってくれていた。 Golangではどうもそうはなっていなく、必要なものは自分で書く様な思想の

          Go学習日誌 #2022/06/17

          Go学習日誌 #2022/06/16

          生活記録アプリ実施事項 以下を実施 ・別の月の行動記録を閲覧する機能 ・バグ修正 ・自動テスト方法の調査 別の月の行動記録を閲覧する機能 上の方に月を選択するところを追加 セレクトボックスのデフォルトを選択状態にしたくて下記の様にコードを書いたが、うまく動作しなかった。 <select name="class" class="form-select form-select-sm" id="js_monthly_selector"/> {{ range .month

          Go学習日誌 #2022/06/16

          Go学習日誌 #2022/06/15

          生活記録アプリ実施事項 以下を実施 ・行動記録を編集・削除する機能追加 ・備考記録を編集・削除する機能追加 編集削除機能 Railsではこういう機能はParamsでIDを渡して実施するのだが、調べたら似た機能があった。 その他 今日はなんか調子悪いので予定変更で残りは明日に回す。 残件 ・別の月の行動記録を閲覧する機能 ・自動テストの実装

          Go学習日誌 #2022/06/15