プログラミング未経験の家庭医がウェブアプリケーションを作るまで

更新日:

先日の記事で書いたように、全くプログラミングを知らないところから勉強を開始し、約4ヶ月程度の勉強を経て簡単なウェブアプリケーションを作成することができました。

おそらくは学習に100時間程度割いたと思いますし、それなりのコスト(時間)はかかったのですが、自分が考えた事を形にできた時はとても嬉しかったです。うまくいかない時もあったのですが、新しいことを学ぶのは刺激的で、概ね制作過程を楽しむことができました。ウェブアプリケーション作成に興味がある医師の先生(そんなに数はいないと思いますが)の学習の指針になればと思い、自分の学習過程を記録に残してみます。

勉強を始めたきっかけ

昨年の秋からSystematic Review Work Shop Peer Support Groupという組織に有料でメンターとなってもらい、Systematic Reviewやどのように研究を批判的吟味するかという勉強を始めました。その際にRやPythonを使えれば便利という記事を見かけたので、2020年3月にProgate(https://prog-8.com)という本当の初心者のためのプログラミング学習サイトの会員となり、Pythonのコースをやってみることにしました。このサイトは構成や説明のイラストが非常によくできていて、超初心者ながら「なんかできそうかも」と思わせながら、学習を進めることができました。ProgateのPython編を2周した段階で、それ以上はどうやって勉強したらいいかも分からなかったので、一旦学習はストップしていました。

メンターを見つけて、超初心者を脱する!

前記事に書いたように、コロナの問題で少し時間ができた際に思い立ってヘルスメンテナンスのアプリケーションを作ろう、と思い立ったのですが、やはりどのように学習していいか分かりませんでした。そこで、MENTA(https://menta.work)というサイトで、エンジニアのメンターを見つけることにしました。このサイトでは有料で単発指導であったり、継続指導をしてくれるメンターを見つけることができます。自分の場合はサイトの講師紹介の欄で、Pythonの指導を掲示しているエンジニアの中から月額5000円でSlackで常時質問を受け付けながら、継続指導してくれる先生を選びました。

自分の学生時代〜専攻医時代の学習スタイルは「畢竟独学に勝るものなし」でした。派手なセミナーや質の高いレクチャーではなく、自分がいかに本を読み、いかに勉強量をこなすかが大事だと考えてきました。臨床研修については、フィールド(患者やスタッフ)さえあれば、誰かに丁寧に教えてもらわなくても、自分の頑張りのみでもある程度のレベルに達することができると考えていたし、実際に働きながらそのような感覚もありました。しかしながら、臨床研究の勉強のときも思ったのですが、全く新しい事を学び始める時には、大きな方向性を示してくれたり、細かい疑問を解決してくれるメンターが側にいるだけで、学習の効率性が大きく変わってきます。もちろん、泥臭く1人で悩まないといけないところもあるのですが、悩まなくてもいいことはメンターに聞いてサクッと解決すればいいわけです。30歳を過ぎてから、とにかく時間を大切に使わなければと常に意識するようになっていたこともあり、今回は完全独力で学習を続けることは考えられませんでした。

Progateの後の学習について

自分はメンターの先生に勧められて、Paiza(https://paiza.jp)というサイトで勉強を進めました。Paizaはもともとエンジニアの就職のための問題集サイトです。プログラミングの問題を解き、正答すると、スコアがどんどん上昇し、ここである程度のスコアを残すことで、IT会社から就職のリクルートの連絡が入ったりするようです。自分はPaizaのD問題、C問題を全て解きました。B問題になると急激に難易度があがり、1問あたり30分程度の時間を要してしまい、解ける時もあれば、解けない時もある、といった感じでした。Paizaにはもともとのサイトの目的もあり、解答がないのがストレスでしたが、グーグルを駆使して、解答し、それでも分からないものは理解を諦めました。C問題までであれば、グーグルで頑張って検索すれば、必ず解けると思いますし、分からないものを分からないもののまま置いておくのはモヤモヤすることもあったのですが、プログラミング学習とはそのような性質のものだと思いながら取り組んでいました。1ヶ月ほど勉強に取り組み、B問題も50%程度の確率で正答できるようになったので、メンターの先生に相談したところ、B問題である程度取り組めれば十分とコメントいただき、次のSTEPに移ることにしました。

Flask、Jinja2をを用いたアプリケーション化

まず、ローカルサーバーに.pyファイルを用意して開発を開始しました。各種検診項目の関数を作り、関数を起動するとその検診項目の推奨や説明が出力されるようにしました。そこに、inputを用いて、変数を手入力し、その変数の結果に応じて、その関数が作動するように条件式を設定しました。初めて、terminal上で、プログラムを作動させて、手動で数値を打ち込んだ後に欲しい推奨が出力された時には(ここから完成形まではまだ恐ろしい時間がかかるとは知らず)嬉しすぎて、思わず叫んでしまいました。

その後はメンターの先生と相談し、Flaskというマイクロウェブアプリケーション用のフレームワークを用いて、このプログラムをアプケーションの形にしていくことにしました。この学習は実は一番ストレスだった部分です。自分の場合はそもそものWebサイトの構造について何も知らない(クライアントサイドとサーバーサイドの違いも分からない)し、そもそも自分が何をしているか分からない状態なので、ひたすらググって、下記のようなサイトを調べながら取り組んでいました。

https://qiita.com/zaburo/items/5091041a5afb2a7dffc8
https://qiita.com/kiyokiyo_kzsby/items/0184973e9de0ea9011ed
https://qiita.com/nagataaaas/items/4662237cfb7b92f0f8
【Flask】formからサーバーサイドにテキストや各種コントロール、ファイルを渡す
Flaskでクライアントサイドに変数(値・リスト・辞書型配列)を渡して表示させる

手を動かしながら、とにかくもがきました。こういったプロセスはたとえメンターがいても省略できるものではないと思います。また、この過程でJinja2というpythonのweb開発でよく使用されるテンプレートエンジンライブラリについても簡単に学ぶ必要もありました。約1ヶ月程度でなんとかアプリケーションとしては最低限の形を作り上げることができました。

フロントエンド(html/CSS)の勉強

そうして、アプリケーションとして最低限の形にはなったのですが、その見た目は質素で見るに耐えないものでした。ページの見た目を改善しようと思うと、html/CSS+(場合によってはJava script)の学習が必須ということが分かり、メンターの先生に相談したのですが、そのメンターの先生はサーバーサイドの専門でフロントエンドについてはそこまで知識がないので、教えることが難しいとのことでした。これも全く知らなかったのですが、エンジニアでもサーバーサイドとフロントエンドのそれぞれをプロとしてこなせる人は少ないとのことでした。やや悩んだのですが、やはりフロントエンド学習についてもメンターが必要と感じ、フロントエンドのメンターと月額5000円で契約しました。フロントエンドについても頑張って勉強したいとメンターの先生に伝えたのですが、「一からJava scriptやJqueryを学ぶことはコストが大きいからやめておけ、本業もあるだろうし。ある程度簡単に綺麗にできる方法があるから教えてあげるよ」と言われて、Bootstrapというレスポンシブウェブデザインに対応したCSSフレームワークを紹介されました。こういう現実的なアドバイスはプロのエンジニアでないとできないと思います。その後は、自分でググってコードを探しつつ実装するというプロセスを繰り返しつつ、細かいデザインについてはメンターの先生に質問して、実装の仕方を教えてもらいました。ある程度形が整ったので、このアプリケーションをデプロイすることにしました。

アプリケーションのデプロイ

アプリケーションのデプロイについては再度、1人目のサーバーサイドのメンターの先生に教えていただきながら作成しました。今回はGoogle Application Engine(GAE)を用いて、デプロイしました。これは、GCP(Google Cloud Platform)の一部として提供されているPaaS(Platform as a Service)なのですが、GAEを用いる一番の利点は無料枠を用いて、ノーコストでデプロイできる事です。これについてもいざやってみると、なかなかうまくいかず、1週間くらい試行錯誤して、ようやくデプロイすることができました。

簡略化しましたが、以上が自分がアプリケーションをデプロイするまでの流れです。振り返ってみると、自分が勉強してきた流れは、
①サーバーサイド言語としてPythonを勉強。
②アプリケーション化のためにFlask + Jinja2を勉強。
③フロントエンドはHtml/css + Bootstrapを勉強。
④Google App Engineでアプリケーションをデプロイ。
という4つのステップに分かれています。

それぞれどのような言語やフレームワークを使うかは自由だと思うのですが、自分の場合は一旦学んだこの①〜④の流れで他にも業務効率化や診療の質改善のため、ヘルスメンテナンス以外にも何かできないか考えてみたいと思っています。


-プログラミング

Copyright© 自分のあたまで考える , 2024 All Rights Reserved Powered by STINGER.