この度、起潮力や木星の影響を調べるためのWebアプリ「Tidal Force Plus」をリリースしました。
この記事では、アプリを紹介し、開発の過程で得た知見や苦労した点を振り返ります。
【目次】
アプリの紹介
アプリの概要
Tidal Force Plus は、地点と期間を指定するだけで「月・太陽による起潮力」と「木星との距離」をグラフ・表で確認できるWebサービスです。
また、ログインするとメモ機能が使えます。
どんな時に使うか
身の回りの出来事で、天体の影響を受けているか気になるものがあれば、データと見比べてみて下さい。
例えば以下のようなもので、何か発見があるかも???
- 植物の成長のタイミング
- 農業などの伝承
- 生き物の行動
- 釣果
tidal-force-plus.net
アプリの操作方法
地点と期間を入力するだけで、起潮力と木星距離をグラフ・一覧表で確認できます。
- 地点と期間を入力し、表示更新ボタンをクリックすると、各計算結果の表が更新されます

- グラフについて
①凡例をクリックすると、表示・非表示を切り替えられます
②スライダーで、表示期間を調整できます
③グラフ(水平方向)は、グラフのタイトルをクリックすると表示されます

- 表について
見たい日付は、下部の数字で選択できます

- メモについて
ログインすると、計算結果の横に、メモ欄が表示されます
「メモのタイトル」の編集や、「メモ」に記録を残すには、
をクリックして下さい

背景
開発のきっかけは、「起潮力」や「木星の位置」と生物の関係を調べようとしたことです。
しかし、それらのデータを手軽に確認できるツールが見つからず、本アプリの開発を始めました。
「起潮力」と「木星」について
「起潮力」と「木星」の概略と興味深い点を紹介します。
(Tidal Force Plus の補足説明のページで、もう少し詳しく書いています。)
「起潮力」
- 起潮力(潮汐力)とは
起潮力とは、周りの星の重力によって発生する力です。
地球の場合、「月」「太陽」による起潮力が、潮の満ち引きを起こします。
- 「実際の潮汐」と「起潮力」の違い
「実際の潮汐」は、地形、海流、地球の自転などの影響を受けているため、「起潮力」との間にズレがあります。
- 起潮力の影響
因果関係は明確ではありませんが、起潮力が生き物に影響している可能性が示唆されています。
大潮の頃に産卵したり、潮の干満のタイミングに合わせると成長が促進される生物がいるそうです。
他にも、「植物 新月 満月」で検索すると、農業関連の伝承などが多数出てきます。
「木星」
- 木星の生き物への影響?
以前、「釣果」と「木星の周期」に相関があると感じた方が、釣果予測のサイトを作られていました。(現在、そのサイトは見つかりません)
この「木星の周期」が何を指すのかが明確でないため、本アプリではまずシンプルに「地球との距離」を指標として扱うことにしました。
- 木星の公転周期は、11.86年です。
木星が太陽の周りを1周する間に、地球が約12周することになります。
「木星」と「地球」の位置関係は、時計の「時針」と「分針」のようなイメージです。
開発の振り返り
開発で使用した技術
Railsの標準機能(Hotwire / importmap)を活かし、できるだけシンプルな構成で実装しました。
- バックエンド
- Ruby on Rails 8.1
- Ruby 3.4
- フロントエンド
- JavaScript
- Hotwire
- Tailwind CSS
- データベース
- インフラ
- 認証
- devise
- omniauth
- omniauth-google-oauth2
- omniauth-rails_csrf_protection
- 外部サービス
- Apache ECharts
- Google OAuth 2.0
- CI/CD
- テスト
- Linter/Formatter
- Rubocop
- ERB Lint
- ESLint
- Prettier
開発中に苦労したところ
「全部です」と言いたい所ですが、いくつか挙げると下記があります。
- 「天体の位置計算」と「起潮力の計算」
「天体の位置計算」「起潮力の計算」ともに初めてで、専門書やサイトを読んで理解する所からのスタートでした。
「天体の位置計算」については、書いてある式・コードを落とし込めば良かったのですが、「起潮力の計算」については、日時と地点から算出する式を自分で作る必要がありました。数学と物理を思い出しながら、何とか解き方を見出しました😅
- クライアント側とサーバ側の連携
クライアント側で「上記の計算」「グラフ・表の表示」、サーバ側では「メモ機能の管理」を行なっており、これらをHotwireで連携しています。連携のタイミングは、「フォーム入力時」と「日付ページネーション操作時」です。
大変だったのは、「日付ページネーション操作」の部分を作る辺りで、ページネーションの作り方、Stimulus、GhostFormパターンなどなど、調べる範囲が広くて時間がかかりました。
- ログイン直後の「データベースに無い(日付と対応しない)メモ欄」への対応
上記の連携を構築した時に、ログイン直後に「データベースに無い(日付と対応しない)メモ欄」が表示され、対応に手間取りました。当初は、別画面を作って(メンバールーティングを追加して)対応していましたが、最終的に、FormObjectパターンを使うことで別画面が不要になりました。
開発中にやってよかったこと
- 作業や調べ物の「記録・まとめ」
調べ物の結果や使ったコマンドなどを記録し、「何度も調べる内容」「よく使うコマンド」などは、内容をまとめ、ブログに投稿しました。
まとめには、それなりに時間がかかりましたが、理解が深まり、その後の作業がスムーズになりました。(ブログ記事数は、以前からの分を含めると100件を超えました😄)
また、制作の途中で、データベースをPostgreSQLからSQLiteに変更する判断をし、リポジトリを新しく作り直したのですが、その際に記録が役に立ちました。
- Hotwire、import map、Kamalなどを学習・使用したこと
Railsの新しい標準技術を学習し、実際に使ったことは、良い経験になったと思います。
今後やりたいこと
- 使いやすい機能の追加
使っていく中で、必要な機能を適宜追加したいと思います。
- 日本以外の地域への拡張
計算式を拡張すると、世界のどの地点でも計算可能になります。何か面白い発見につながれば嬉しいです。
おわりに
フィヨルドブートキャンプのメンターの皆さんのご指導のおかげで、アプリが何とか形になりました。
また、先人の方々の技術ブログも、大変参考にさせていただきました。
この場を借りてお礼申し上げます。本当にありがとうございました。
おまけ(利用例)
最近、食べた柑橘の種が発芽するか試しているのですが、根っこが出てくるタイミングと、起潮力が大きい時期が重なっているケースが多いような気がしています。(違うケースもあり)
真面目に記録とってなかったので、本アプリを使って調べてみようと思います。
根っこが出ると、ちょっとテンションが上がるので、良かったら試してみて下さい。(湿らせたキッチンペーパーに挟んで、チャック袋や容器などに入れて置いておくと出てきました🌱)
