e-春風塾では、塾の予約を取ったり塾からのお知らせを確かめたりするのに使える、スマートフォンアプリを自社開発し運用しています。こちらのアプリがつい先日、大型アップデート。それを記念して、アプリの開発に携わった岡部先生(以下、べーやん先生)に、開発秘話インタビューをしてきました!
(取材日 2025.3.12)
―開発されたアプリについて、紹介をお願いします。
概要としては塾からのお知らせ機能や、塾の予約機能を搭載したアプリです。予約機能についてはこのアプリ内で全部完結するようになっていて、電話などで連絡する必要なく、ボタン操作のみで予約とその取り消しができます。
3月上旬には、生徒さんの学習の進捗状況を確認できる機能をリリースしました*。プログラミングの勉強で使っている教材の各ステージの紹介と、そのステージにおける生徒さんの取り組み状況を、アプリ内で知ることができるようになっています。授業内で使っている進捗管理サイトで、生徒さんがどのステージまで進んだかを保存できるようになっているのですが、そのサイトとこのe-春風塾アプリをサーバーで連携して、整合性が取れるように整備しました。サイトの方で「今日はここまでクリアしました」というのを保存すると、アプリのステージ紹介の所に完了のマークが付く、という感じです。
*(編注:現状はコードアドベンチャーコースのみ対応)

―とても便利そうなアプリですね。開発をすることになったきっかけは何だったんですか?
アプリ自体は去年の2月頃から開発が始まったんですが、それまではずっとウェブサイトの方で運営していました。ただウェブサイトだと、特にスマホに通知を送ることができないというデメリットがあって。そこが一つ、アプリに移行するきっかけになったのかなと思います。
あとは、ユーザー目線で見た時の使いやすさも、アプリ開発のきっかけでした。ブラウザからサイトにアクセスするのって、やっぱりステップが多くて心理的な負担が大きいんですけど、アプリだと画面上のアイコンをタップするだけで済みますよね。ほんの些細な違いかもしれないですけど、日常的に使うものだということを考えると、こういうところでユーザーから見たツールの便利さというのは大きく変わってくるかなと思います。
ステージの進捗が確かめられる機能をリリースしたのは、「生徒が何を学んでいるのかが保護者の方に伝わりづらい」という問題を抱えていたことがきっかけです。子供が何をしているかというのは保護者の方も気になることだと思うので、こうした機能は潜在的な需要があるかなと思って開発に至りました。

―アプリの開発というと複雑なイメージがありますが、実際にはどんなツールを使って開発が進んでいくんでしょうか?
アプリを開発するにはまず使うツールやプログラミング言語の選定から始まります。僕自身、アプリ開発はこれまでに経験が無くて、塾としても初めての試みだったので、どのツールを使ったら今後の開発やアップデートが効率良くできるか、管理がしやすいか、という観点から選ぶのは結構難しかったですね。結果的に今回はFlutter(フラッター)というフレームワークを使って開発しました。
―Flutterというのは?
Dartというプログラミング言語を使って作られた開発フレームワークです。プログラミング言語はそれ自体が動いてプログラムを構成するんですが、Flutterはそれより一段階上の抽象的な立ち位置にあるツールで、Dartの世界のルールに則ってプログラムを書くと、アプリが作れるというものです。
Flutterを選んだ一番の理由は、AndroidとiOSの両方を同じプログラムで作ることができることです。従来はAndroidアプリを作るためのツールとiOSアプリを作るためのツールが別々だったので、同じ機能を持つプログラムを二つの言語で書かないといけなくて、二倍の時間と労力が掛かっていたんですね。でもFlutterはプログラムを書いた後でAndroid版にするかiOS版にするか、さらにウェブ版にするかを選ぶことができる、いわゆるクロスプラットフォームと呼ばれるものなんです。最後にどのバージョンにするかを設定すると、Dartで作ったプログラムが、Android版ならJavaというプログラミング言語に、iOS版ならswiftに、ウェブ版ならJavaScriptに変換されるんですね。これがアプリ開発には非常に便利で、アプリを作るならこれだろう、ということで選びました。
情報技術系の分野では、開発者が携わる段階が抽象化する傾向にあります。具体的なそれぞれの機械はそれぞれに独自のルールを持っているので、全部に対応するものを一人が作るのは難しいんですよね。そこにルールを変換する機構を噛ませることで、一段上の抽象的な世界で作業することができる。そこから後はその機構に任せて具体的な機械に落とし込んでいく。こういった流れが現在では結構主流になっているんです。そういう意味でも、Flutterを使って開発した、というのは、今のトレンドに乗った選択だったんじゃないかなと思います。
―開発の過程で、大変だったことや苦労したことはありますか?
長期間に渡って開発したり、規模の大きなものを作ろうとしたりすると、プログラムが大きくなって管理するものが増えて、技術負債というのが溜まっていくんです。最初は小さなプログラムなので自分の頭の中で管理できるんですけど、それが大きくなるとどのプログラムがどの機能に繋がっているか分からなくなってきて、いわゆるスパゲッティコードと呼ばれる状態に陥ってしまうんですね。それを僕も開発の中で、去年の夏か秋頃にかなり感じていたところがあって。作れば作るほどどんどん開発スピードが落ちるな、というのを実感していました。
そこから少しプログラムを管理する方法を勉強して、1から作り直す形にはなったんですが、そのおかげで今、機能を追加する段階になっても開発スピードが落ちなくなりました。この部分は苦労したところでもあり工夫したところでもあり、自分でも成長したなと思うところではありますね。

―1から作り直すなんてすごいですね!具体的にはどんなふうに変化をくわえたのでしょうか?
データをどんなふうに管理するかを大きく変更しました。
従来は予約の情報や生徒さんの情報など色々なデータを、アプリ内のどのプログラムからも扱える、グローバル変数と呼ばれる概念で管理していたんですが、それだと、いつどのプログラムがどのデータを参照してどう書き換えているか、という、プログラム同士の関係が複雑になってしまったんです。更新のタイミングや変更の仕方を一つ間違えると、他のプログラムにも影響を与えてしまって、挙動がおかしくなったりしていました。
それを解消するために、Flutterの中にある「状態管理」という、変数の状態を常に監視することができるシステムを導入しました。アプリ内で予約の変更や情報の編集などでデータの書き換えが起こった時に、その情報を監視している別のプログラムにも通知が行くようにしたんです。それまではデータの書き換えが起こった時の通知のためのプログラムを別で用意していたので、それが要らなくなった分、開発効率がすごく上がりました。
―実際にアプリを開発してみて、どうでしたか?
こういうことって、学生時代に出来るプログラミングではあまり経験できないものなんですよね。学生時代に研究で使うプログラムは、自分個人だけが使う目的であったり、単純な機能のプログラムだけを書く、小さな規模のものだったり、あるいは何か大会に出すような開発であっても、期間が数か月から半年程度で、そこまで大きなプログラムになることはなかったんです。でも仕事で使うとなると、その部分が変わってくるというか。スケールアップに対応しつつ、開発体制も整えられるようにしつつ、というように、意識しないといけない部分が変わって、学生の開発から仕事の開発に変わったな、と感じました。
―このe-春風塾アプリの開発について、今後の展望があれば教えてください!
このアプリは実は教師版も作っているんですが、塾の運営がよりスムーズになるように、機能を増やしていきたいなと思って開発を進めています。生徒向け・保護者の方向けのアプリの方も今後定期的なアップデートは行う予定です。ゆくゆくはスマホ一つで全ての機能が完結するような、オールインワンの形に出来たら良いなと思っています。
―べーやん先生、ありがとうございました!

取材&記事制作 ゆずか記者(保坂柚花 九州大学文学部2年)