ZEN Study iOS アプリの10年と、現在とこれから

2026年4月6日で、ZEN StudyZEN Study iOS アプリもリリースから10周年を迎えました🎉

この10年のあいだに、対象となる学校は高校・大学ともに増え、デバイス環境や iOS 自体の姿も大きく変わりました。それに合わせて、ZEN Study iOS アプリも見た目も中身も進化を続けています。

この記事では、そんな ZEN Study iOS アプリの10年間を振り返りつつ、現在の技術スタックや、これから進めていきたいことについて紹介します。

なお、この記事を書いている中の人は約3年前に入社しており、10年前にはまだいませんでした。社内で聞いたり、社内の情報や Git のコミットログなどを集めた上で、AI にも手伝ってもらいながら記事としてまとめています。そのため、一部は当時の資料からの推測も含まれますが、「だいたいこんな変遷をたどってきたんだな」という雰囲気を感じていただければ幸いです。

ZEN Study 自体がどう進化してきたかについては、特設サイトがあるのでこちらのページも参照ください!
https://www.nnn.ed.nico/pages/10th_anniversary

スクリーンショットの変化で見る10年

まずは、画面の変化から10年をざっくりと振り返ってみます。

2016年 v1.0.0 リリース当時

ホーム Q&A 授業 設定
2016年ホーム画面 2016年Q&A画面 2016年授業画面 2016年設定画面

初期リリース時は現在のマイコース画面がホーム画面となっていたりするものの、現在にも繋がる要素も多く、コンセプトは初期時点から固まっていたようです。

2021年 ホーム画面リニューアル

ホーム マイコース フォーラム 設定
2021年ホーム画面 2021年マイコース画面 2021年フォーラム画面 2021年設定画面

2021年頃にホーム画面をリニューアルし、「学習を再開する」や「最新の授業」などが登場しました。

参考:リリース時のフォーラム投稿

2024年 ZEN Study へリニューアル

ホーム
2024年ホーム画面

2024年には ZEN Study へブランドリニューアルし、それと同時にホーム画面を再リニューアルしました。

ブランドリニューアルに伴うデザイン変更はもちろん、学習履歴などの使い勝手の改善も実施しています。

参考:リリース時のフォーラム投稿

2026年3月現在

ホーム マイコース フォーラム ライブ授業 ユーザー
2026年ホーム画面 2026年マイコース画面 2026年フォーラム画面 2026年ライブ授業画面 2026年ユーザー画面

※ N高グループ生でログインした場合のスクリーンショットです

現在はリニューアルされた画面も増え、クライアント共通のデザインフレームワークが多くの画面で採用されています。リニューアルに伴って、SwiftUI 化も進めています。

iOS アプリに使う技術の変化で見る10年

ここからは、技術的な観点での変遷をざっくりとマイルストーンごとに振り返っていきます。

2015–2016年:春の正式リリースまで

ZEN Study iOS アプリの初期コミットは、2015年夏頃に記録されています。
v1.0.0 は 2016年4月6日に主にN高生をターゲットとしてリリースされ、その後 2016年7月14日に公開された v1.1.0 で一般ユーザー向けにも間口を広げました。

当時の技術スタックは以下のような構成でした。

  • 言語:Swift
  • UI:UIKit(Storyboard)
  • アーキテクチャ:MVC
  • 依存管理:CocoaPods と Carthage

すでにこの頃から APIClient・Repository・Entity といったレイヤー分割の概念はありましたが、ViewController から直接利用する構成になっていました。
また、SwiftLint や fastlane も導入されており、早い段階から品質や運用面を考えながら開発をしていたようです。

2016–2019年:RxSwift 採用と MVVM への移行

2016年夏頃には RxSwift を導入し、これに合わせて Kickstarter の OSS(Kickstarter iOS)を参考にした MVVM への移行が徐々に進んでいきました。

2018年頃には移行も終盤を迎え、2019年にはアプリ全体として MVVM 構成への移行を完了しました。

のちのちの話ではありますが、ある程度アーキテクチャが固まったタイミングで、リファレンスリポジトリも作成され、新しく入るメンバーがこの構成に慣れやすいような工夫も行われていました(参考:iOSチームではリファレンスリポジトリを運用しています)。

機能追加が続く中でも、iPad 向けのレイアウト対応や、ウィジェット提供、Xcode / Swift の継続的なバージョンアップ(2019年春頃に Swift 5 対応を完了)といった形で、プラットフォームの進化に追従し続けています。

また、CI/CD として Bitrise を利用し始めたのもこの頃のようでした。

2020–2021年:プロジェクト・リソース管理ツールの導入

2020年以降は、コードベースの拡大に合わせてプロジェクト構成やリソース管理の整備が進みました。

Xcode プロジェクト構成管理に XcodeGen、リソース管理に SwiftGen を導入し、ビルド設定やアセット管理の自動化・型安全化を行いました。

また、どのサービスも対応に追われたと思いますが、2020年に必須化された Sign in with Apple への対応などもありました。

2022–2023年:SwiftUI の本格採用と依存管理の刷新

サポートOSの引き上げに伴って、ある程度 SwiftUI でのプロダクト開発が可能と判断し、ZEN Study でも本格的な導入を始めました。
また、ブログ記事でも紹介しているアカウント削除機能の対応など、プラットフォーム要件への対応もこの時期に行われました。

SwiftUI の導入

社内で勉強会や検証を進めながら、2022年頃から設定画面など一部画面の SwiftUI 化を開始しました。

その後、クライアントを跨いだ共通デザインフレームワークが社内で生まれ、これを SwiftUI で実現しました。
以降、新規作成・リニューアルする画面は SwiftUI を前提として実装しています。

SwiftUI 導入にあたっては、既存の資産を活かせるか、OSバージョンごとの違いをどう吸収するか、古い端末でのパフォーマンスはどうかなど、さまざまな検討が必要でした。これらについては以下の記事で詳しく紹介しています。

依存管理の Swift Package Manager 移行

このタイミングで依存管理も見直し、CocoaPods から Swift Package Manager(SPM)へ全て移行しました。

また、Entity や共通処理などをローカル SPM パッケージ化し、モジュール分割を進め、後述のマルチモジュール化に繋がりました。

2024–2025年:Swift Concurrency とマルチモジュール化への段階的な移行

2024–2025年は、「Swift Concurrency」と「マルチモジュール化」への段階的な移行に取り組みました。

2025年には Xcode 側の改善もあり、一定の役目を終えたことで XcodeGen を廃止しました。

また、Bitrise のプラン変更に伴い、CI を中心に GitHub Actions への移行も実施しました。

Swift Concurrency への移行

2024年夏頃から、RxSwift から Combine + Swift Concurrency を使った構成への移行を開始しました。

また、Swift 6 コンパイラへの移行を進めつつ、言語モードの Swift 6 化も段階的に取り組んでいます。
現時点ではアプリ全体の言語モードは Swift 5 のままですが、一部ローカルパッケージでは Complete Concurrency Checking を ON にし、Swift 6 の並行処理チェックを先取りで有効化しています。

新しく作る画面については、ViewModel は Swift Concurrency 前提で実装としつつ、既存の RxSwift ベースのコードと共存させながら、段階的に移行を進めています。

マルチモジュール化

フォーラム機能の各画面の UI リニューアルを進める中で、2025年からフィーチャー単位のモジュール化を開始しました。

ローカル SPM パッケージを活用しつつ、タブ単位くらいの粒度でマルチモジュール化を本格的に推進しています。

現在の技術スタックとこれから

現在の技術スタック

2026年3月執筆時点での、ZEN Study iOS アプリのおおまかな技術スタックは次のようになっています(最新の情報は、記事末尾にある採用資料もあわせてご覧ください)。

  • サポートOS:iOS 17.0+
  • 開発環境:Xcode 26.4(Swift 6.3/言語モードは Swift 5 を使用)
  • アーキテクチャ:MVVM

使用している主なライブラリ・ツール・サービスは以下の通りです。

  • ライブラリ等
    • UI:UIKit, SnapKit, SwiftUI, AVFoundation, WebKit
    • 非同期処理:RxSwift, Combine, Swift Concurrency
    • 通信:Alamofire, WebSocket
    • テスト:Swift Testing, Mockolo
  • ツール(一部抜粋)
    • Swift Package Manger
    • SwiftGen
    • SwiftLint
    • fastlane
    • Renovate / Dependabot
    • RocketSim
  • サービス
    • CI/CD:GitHub Actions, Bitrise
    • Firebase

今やっていること、これからやりたいこと

2019年頃に固まった UIKit × RxSwift × MVVM の構成から、近年の iOS 開発環境のアップデートに合わせて、SwiftUI × Swift Concurrency × MVVM という構成への移行を進めています。

まだ道半ばではありますが、新しい構成で書かれたコードの比率は少しずつ増加しており、これに伴って恩恵も受けやすくなるため、言語モードの Swift 6 化も現在進めているところです。

あわせて、コードベースの拡大に対応するため、マルチモジュール化も継続的に進めています。
機能ごと・責務ごとにモジュールを分割し、「変更の影響範囲を小さくする」「ビルド時間を抑える」「テストをしやすくする」といった狙いがあります。

2025年には、N高グループの3校目となるR高等学校やZEN大学も開学し、これまでよりもさらに多くの方にアプリを使っていただく状況になりました。
新しい機能をどう実現するかはもちろん、より長く安定的に運用していくにはどうすればよいかをチームで常に考えながら、これからも開発・運用を続けていきます。