スマホで簡単!フォーム入力するだけで登山計画書(PDF)をサクッと作成・シェアできるアプリを開発してみた【Rails】

突然ですが、皆さんは登山しますか?

「Yes」と答えたあなた、登山へ行く際は登山計画書を作成していきますか?

ここ十数年の間に登山ブームの広がりとともに、登山者の遭難事故が増えていることに伴い、

2014年頃から長野県の北アルプスや富士山など一部の山域で登山計画書が義務化されるなど、

『登山計画書』は遭難防止対策の一つとして重要なアイテムとして位置付けられるようになりました。

ただ、登山計画書ってどう書けば良いのかわからなかったり、分かっていても毎回書くのが面倒だったりしませんか。

(僕も一登山者としてその気持ちわかります)

そこで、登山計画書をスマホで簡単に作成できるアプリ「スマホ de 登山計画書(試作版)」を作ってみました。

登山好きの方はぜひ試してみてください。

「スマホ de 登山計画書(試作版)」はこちら
https://tozan-plan.herokuapp.com

目次

『スマホ de 登山計画書』を開発した背景と目的

僕は学生時代にワンダーフォーゲル部(登山部のゆるい版)に所属しており、冬以外はほぼ毎月登山に行っていました。

部活で登山に行く際は毎回必ず「登山計画書」を作成していましたし、卒業後に趣味で登山へ行く際も登山計画書は欠かさず作成、提出(警察署や登山口のポストなど)していました。

しかし、正直なところ登山へ行くたびに登山届けを作成するのは面倒でした。

登山届けを作成するたびにExcelを立ち上げて編集しなければならない…

もっと、手軽にサクッと登山計画書を作成できる仕組みはないのか…

そこで、閃きました。

スマホでサクッと登山計画書を作成できるアプリがあれば解決するじゃん!って。

というわけで、今回スマホで必要事項のデータを入力したらサクッと登山計画書が作成&印刷できちゃうアプリ「スマホ de 登山計画書」を開発するに至りました。

アプリの開発情報

アプリの開発環境とソースコード

アプリの開発環境は以下の通りです。

  • Ruby 3.1.2
  • Ruby on Rails 7.0.3
  • Bootstrap 5.1.3
  • M1 Macbook Air 2020
  • mac OS Monterey (ver. 12.4)

また、アプリのデモサイトとソースコードへのリンクを以下に記します。

ER図

作成したアプリの主な機能・特徴について

まずは、今回作成したアプリ「スマホ de 登山計画書」の主な機能や特徴について述べます。

  • 必要事項を入力するだけで「登山計画書フォーマット(PDF)」に入力内容が反映される
  • 入力した個人情報をアドレス帳に保存できる(次回以降の入力が楽になる)
  • 作成した計画書を複製(コピー)できる
  • 出力した登山計画書(PDF)を家族や友人などに手軽にシェアできる
  • スマホからでも印刷できる(プリンタと接続済みの場合)

一つずつ見ていきましょう。

必要事項を入力するだけで登山計画書フォーマット(PDF)に反映される

当アプリの最大の特徴は、必要事項を入力するだけで登山計画書フォーマットが自動生成されるという点です。

すでに計画書用のフォーマットは用意されているため、ユーザー側でわざわざ登山計画書のテンプレートを用意する必要はありません。

計画書作成の流れとしては、まずマイページにログインして「計画書を作成」をクリック。

まずは、計画書の大枠として「目的の山域・山名」「入山日」「下山日」「計画書の提出先(任意)」などを入力して「登録」します。

計画書の大枠が作成されたら、引き続き「登山者名簿の登録」「行動スケジュールの登録」「エスケープルートの登録」「持ち物情報の登録」「所属している山岳会などの登録(任意)」などの詳細情報を詰めていきます。

必要事項を入力し終えたら、ページ下部の「PDFを出力する」ボタンをクリックして登山計画書(PDF)を表示します。

以下のように、入力した情報が反映されていれば成功です。

ちなみに、PDFの出力機能は専用のGem「Prawn」を用いて実装しました。

あわせて読みたい
【Rails】PDF出力機能を実装できるGem「Prawn」の使い方と実例(出力サンプル)をご紹介 現在Railsで開発中のアプリにPDF出力機能を実装したい... そこで、RailsでPDFを生成するためのgem(ライブラリ)について色々とググってみた結果、カスタマイズ性に優れ...

入力した登山者名簿をアドレス帳に保存できる(次回以降の入力が楽になる)

当アプリには、ユーザーの負担を少しでも軽くするために、登山者名簿登録フォームにてアドレス帳保存機能を設けました。

登山者名簿には登山計画書において必須の個人情報を記入する必要があるため、入力に時間がかかります。

(登山計画書を手書きで作成する際に一番面倒大変な箇所です)

そこで、一度入力した個人情報をアドレス帳に登録しておけば、次回以降の入力がとてもスムーズになるようにしました。

(アドレス帳に登録するかどうかはユーザー自身が選択できるよう、チェックボックスを設けました)

アドレス帳に保存すると、次回以降の登録フォームの「アドレス帳から追加」に、登録したアドレス帳の氏名が表示されます。

入力したいアドレス帳を選択すると、個人情報が自動で補完されるので登録がとてもスムーズに行えます。

あわせて読みたい
【Rails7】JavaScript + Stimulusでフォームの自動入力補完機能を実装してみた(DBからJSへの値受け渡し) Railsで、データベースから取得した値を使ってフォームの自動入力補完機能を実装する方法についてまとめたメモ書きです。 イメージはこんな感じです↓ データベースに保...

作成した計画書を複製(コピー)できる

例えば、同じメンバーで同じ山に頻繁に行くのでしたら、前回作成した計画書をほとんどそのまま流用できますね。

こうしたケースも想定して、登山計画書をワンクリックでそのまま複製(コピー)できる機能もつけました。

コピー方法は簡単で、作成した計画書一覧にある複製ボタン(緑色のボタン)を押すだけです。

これで、「計画書名(コピー)」という名の計画書が複製されます。

これで、計画書作成の手間がだいぶ省けるのではないでしょうか。

出力した登山計画書(PDF)を家族や友人などに手軽にシェアできる

登山へ出かける場合は万が一に備えて、事前に家族や友人、知人などに行き先を知らせておくべきです。

できれば、作成した登山計画書も一緒に送っておくと相手側も安心です。

当アプリではスマホで簡単に登山計画書(PDF)の出力ができるので、そのスマホの特性を活かして登山計画書(PDF)のシェアも簡単に行うことができます。

例えば、iPhoneならPDFを開いた状態でSafariの下部にある共有ボタンを押すと、任意のアプリ(LINEなど)でシェアできます。

スマホからでも印刷できる(プリンタと接続済みの場合)

シェアだけでなく、印刷もスマホから簡単に行えます。

事前にスマホとプリンタを接続しておく必要がありますが、接続済なら以下の手順て簡単にプリントアウトできます。

ちなみに、以下スマホ(iPhone 12 Pro)でプリントアウトした計画書です。

スマホ(iPhone)で印刷

PDFファイルで出力されているため、スマホやPCなど動作環境によってレイアウトが崩れたりすることはありません。

スマホでも安定品質です。

今後の課題

現状における今後の課題は以下の4点です。

  1. 行動スケジュールの時間入力フォームの改善
  2. デザイン(Bootstrap5)の改善
  3. コードの最適化(リファクタリング)
  4. AWSへのデプロイ

まず、自分が使ってみて「ここは要改善」と感じたのが行動スケジュールの時間入力欄です。

現状だと、フォームをtime fieldにしているため、iPhoneからだと分刻みのドラムロール型の入力フォームとなります。

このドラムロール型、入力してみて気付いたのですが恐ろしいほど使いにくい…非常にストレスが溜まるw

入力フォームをタップした瞬間に現在時刻からのスタートとなるので、設定したい時刻と現在時刻があまりにかけ離れていると設定するだけでも一苦労。

今後は、時刻の入力フォームをtime field(ドラムロール型)ではなくnumber fieldに変更し、4桁の数字データのみをDBに保管するようにしようと思います。

時刻を表示する際は、この4桁の数字データをうまく処理して時刻(string)表示に変換すれば良いですし。

2つ目の課題はデザインですね。

今回は試作版ということもありBootstrapで実装した質素なデザインとなっていますが、いざ使ってみるとやはり味気ない気がする。

やはり、デザインにはこだわりたい、と改めて思いました。

ということで、今後はBootstrapに頼らず自力でCSSを組み上げてデザインをカスタマイズしていく予定です。

3つ目の課題はコードの最適化ですね。

アプリが完成してからコードを一度読み返してみたところ、至る所に処理の重複があったり、無駄なコードがあったりとまだまだ改善すべき点がたくさんあることがわかりました。

メンテナンスのことを考えると、可読性の高いコードとは程遠い。。。

(モデルやコントローラーも多すぎてごちゃごちゃしているので、階層化すべきなのかな)

「このコード、もっと効率よく書けないか」

「この処理、メソッド化して共通化できないか」

など、改めてコードと向き合っていく必要があると感じました。

最後、4つ目の課題はAWSへのデプロイです。

いずれはやらなきゃなーとは思っていたんですが、Herokuのデプロイの手軽さに甘えてしまいなかなか踏み出せずにいました。。。

が、そのHerokuもいよいよ今年2022年11月28日から無料利用できなくなるとのこと(衝撃の事実!)

このままHerokuを利用しても良いのですが、料金が意外と馬鹿にならない。。。(最低でも月額2,000円はかかるらしい)

AWSなら従量課金制だし、1年間は無料で利用できるし、、無料バンザーイw

じゃなくて、せっかくならAWSへのデプロイ方法も学んでおきたいので、これを機にAWSへのデプロイに挑戦してみようと思います。

以上です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

愛知の34歳。無職で暇になり始めたプログラミング(Ruby on Rails)の忘備録をまとめたブログです。最近は別にやりたいことができたのでプログラミングほぼやっていません。気が向いたらまた再開するかも。僕の日常はメインブログの方で更新しています。

コメント

コメントする

目次