Skip to content

Commit 1bce09e

Browse files
authored
Merge pull request #75 from tsukuba-denden/dev
2 parents 2973916 + 5bce1f2 commit 1bce09e

29 files changed

+1912
-114
lines changed

.github/workflows/build.yaml

Lines changed: 90 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
# .github/workflows/build.yml
2-
31
name: Android Build
42

53
# ワークフローが実行されるトリガーを指定
@@ -24,36 +22,46 @@ on:
2422
type: boolean
2523
required: true
2624
default: false
27-
version:
28-
description: 'Version'
29-
type: string
25+
generate_release_notes:
26+
description: 'Generate Release Notes'
27+
type: boolean
28+
required: true
29+
default: true
30+
build_type: # <--- 変更点: ビルドタイプを選択する入力を追加
31+
description: 'APK Build Type (split per ABI or single universal)'
32+
type: choice
3033
required: true
31-
default: 'v0.0.0-Beta'
34+
options:
35+
- split
36+
- single
37+
default: 'split'
3238

3339
jobs:
3440
build:
3541
# 実行環境としてUbuntuの最新版を使用
3642
runs-on: ubuntu-latest
43+
outputs: # outputs を定義して他のジョブから参照可能にする
44+
version: ${{ steps.get_version.outputs.version }}
45+
# <--- 変更点: deployジョブでビルドタイプを判定するためにoutputsを追加
46+
build_type: ${{ github.event.inputs.build_type || 'split' }}
3747

3848
steps:
3949
# Step 1: リポジトリのコードをチェックアウト
4050
- name: Checkout code
41-
uses: actions/checkout@v4 # 最新バージョンを確認してください
51+
uses: actions/checkout@v4
4252

43-
# Step 2: Java Development Kit (JDK) をセットアップ (Androidビルドに必要)
53+
# Step 2: Java Development Kit (JDK) をセットアップ
4454
- name: Set up JDK 21
45-
uses: actions/setup-java@v4 # 最新バージョンを確認してください
55+
uses: actions/setup-java@v4
4656
with:
47-
distribution: 'temurin' # または他のディストリビューション
48-
java-version: '21' # プロジェクトに必要なJavaバージョンを指定
57+
distribution: 'temurin'
58+
java-version: '21'
4959

5060
# Step 3: Flutter SDK をセットアップ
51-
# (オプション) プロジェクトルートに .flutter-version ファイルがあればそのバージョンが使われます
5261
- name: Set up Flutter
53-
uses: subosito/flutter-action@v2 # 最新バージョンを確認してください
62+
uses: subosito/flutter-action@v2
5463
with:
55-
channel: 'stable' # stable, beta, dev, master から選択
56-
# flutter-version: '3.x.x' # 特定のバージョンを指定する場合
64+
channel: 'stable'
5765

5866
# Step 4: Flutterの依存関係を取得
5967
- name: Get Flutter dependencies
@@ -63,29 +71,80 @@ jobs:
6371
# - name: Clean Flutter project
6472
# run: flutter clean
6573

66-
# Step 6: Android APK をビルド (--release オプションでリリースモード)
67-
# --split-per-abi をつけるとCPUアーキテクチャごとにAPKが分割されます
68-
- name: Build APK
69-
run: flutter build apk --release --split-per-abi
70-
# 単一のAPKが必要な場合は: flutter build apk --release
74+
# Step 6: Android APK をビルド
75+
# <--- 変更点: 以下の2つのステップでビルド方法を分岐 --- >
76+
77+
# 分割APKをビルド (デフォルトまたは手動で'split'を選択した場合)
78+
- name: Build APK (Split per ABI)
79+
if: ${{ (github.event.inputs.build_type || 'split') == 'split' }}
80+
run: flutter build apk --release --split-per-abi --build-number=${{ github.run_number }}
81+
82+
# 単一APKをビルド (手動で'single'を選択した場合)
83+
- name: Build APK (Single Universal)
84+
if: ${{ github.event.inputs.build_type == 'single' }}
85+
run: flutter build apk --release --build-number=${{ github.run_number }}
86+
87+
# Step 7: pubspec.yaml からバージョンを読み取る
88+
- name: Read version from pubspec.yaml
89+
id: get_version
90+
run: |
91+
echo "version=$(grep '^version: ' pubspec.yaml | sed 's/version: //')" >> $GITHUB_OUTPUT
7192
72-
# Step 7: ビルドされたAPKを成果物としてアップロード
73-
# --split-per-abi を使用した場合、複数のAPKが生成されるためワイルドカードを使用
74-
- name: Upload APK Artifact
93+
# Step 8: ビルドされたAPKを成果物としてアップロード
94+
# <--- 変更点: 以下の2つのステップでアップロードするファイルを分岐 --- >
95+
96+
# 分割APKをアップロード
97+
- name: Upload Split APKs Artifact
98+
if: ${{ (github.event.inputs.build_type || 'split') == 'split' }}
7599
uses: actions/upload-artifact@v4
76100
with:
77-
name: release-apk # 成果物の名前
101+
name: release-apk # deploy ジョブで参照するアーティファクト名
78102
path: build/app/outputs/flutter-apk/app-*-release.apk
79-
# 単一APKの場合のパス例: build/app/outputs/apk/release/app-release.apk
80103

81-
- name: Release
104+
# 単一APKをアップロード
105+
- name: Upload Single APK Artifact
106+
if: ${{ github.event.inputs.build_type == 'single' }}
107+
uses: actions/upload-artifact@v4
108+
with:
109+
name: release-apk
110+
path: build/app/outputs/apk/release/app-release.apk
111+
112+
deploy:
113+
runs-on: ubuntu-latest
114+
needs: build # build ジョブの完了を待つ
115+
if: github.event.inputs.release == 'true' # release 入力が true の場合のみ実行
116+
steps:
117+
- name: Checkout code # リリースノート生成のためにリポジトリのコードをチェックアウト
118+
uses: actions/checkout@v4
119+
with:
120+
fetch-depth: 0 # タグやコミット履歴をすべて取得
121+
122+
- name: Download APK Artifact
123+
uses: actions/download-artifact@v4
124+
with:
125+
name: release-apk # build ジョブでアップロードされたアーティファクト名
126+
path: artifacts/apk/ # ダウンロード先のディレクトリ
127+
128+
# <--- 変更点: 以下の2つのステップでリリースするファイルを分岐 --- >
129+
130+
# 分割APKをリリース
131+
- name: Release with Split APKs
132+
if: ${{ needs.build.outputs.build_type == 'split' }}
82133
uses: softprops/action-gh-release@v2
83-
if: github.event.inputs.release == 'true'
84134
with:
85-
tag_name: ${{github.event.inputs.version}}
135+
tag_name: ${{ needs.build.outputs.version }}
86136
draft: false
87137
prerelease: false
88-
generate_release_notes: true
89-
files: build/app/outputs/flutter-apk/app-*-release.apk
138+
generate_release_notes: ${{ github.event.inputs.generate_release_notes }}
139+
files: artifacts/apk/app-*-release.apk # 分割APKのパス
90140

91-
141+
# 単一APKをリリース
142+
- name: Release with Single APK
143+
if: ${{ needs.build.outputs.build_type == 'single' }}
144+
uses: softprops/action-gh-release@v2
145+
with:
146+
tag_name: ${{ needs.build.outputs.version }}
147+
draft: false
148+
prerelease: false
149+
generate_release_notes: ${{ github.event.inputs.generate_release_notes }}
150+
files: artifacts/apk/app-release.apk # 単一APKのパス

GEMINI.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# Shojin App プロジェクト詳細説明
2+
3+
## プロジェクト概要
4+
5+
**Shojin App**は、AtCoderの競技プログラミング問題をスマートフォンで練習するためのFlutterアプリケーションです。 [1](#0-0)
6+
7+
## 主要機能
8+
9+
### 1. アプリ構成
10+
アプリは5つの主要画面で構成されており、BottomNavigationBarで切り替え可能です:
11+
12+
- **ホーム画面**: 新しいホーム画面(現在はプレースホルダー) [2](#0-1)
13+
- **ブラウザ画面**: WebView機能を提供 [3](#0-2)
14+
- **問題画面**: AtCoder問題の詳細表示 [4](#0-3)
15+
- **エディタ画面**: コード編集機能 [5](#0-4)
16+
- **設定画面**: アプリ設定管理 [6](#0-5)
17+
18+
### 2. AtCoder問題スクレイピング機能
19+
`AtCoderService`クラスが核となる機能を提供し、AtCoderの問題ページから以下の情報を抽出します:
20+
- 問題タイトル
21+
- 問題文
22+
- 制約条件
23+
- 入力形式
24+
- 出力形式
25+
- サンプル入出力データ [7](#0-6)
26+
27+
### 3. データモデル
28+
問題データは`Problem`クラスで管理され、サンプル入出力は`SampleIO`クラスで構造化されています。 [8](#0-7)
29+
30+
## 技術スタック
31+
32+
### 主要依存関係
33+
- **Flutter SDK**: バージョン3.7.2以上 [9](#0-8)
34+
- **UI関連**:
35+
- Material Design 3対応
36+
- Dynamic Color(Material You)サポート [10](#0-9)
37+
- Google Fonts(Noto Sans JP) [11](#0-10)
38+
39+
### Webスクレイピング・データ処理
40+
- **HTTP**: API通信用 [12](#0-11)
41+
- **HTML解析**: HTMLパーサー [13](#0-12)
42+
- **Markdown**: 問題文表示用 [14](#0-13)
43+
44+
### コードエディタ機能
45+
- **Flutter Code Editor**: シンタックスハイライト対応 [15](#0-14)
46+
47+
### その他の機能
48+
- **状態管理**: Provider パターン [16](#0-15)
49+
- **データ永続化**: SharedPreferences [17](#0-16)
50+
- **WebView**: ブラウザ機能 [18](#0-17)
51+
52+
## アーキテクチャ
53+
54+
### 状態管理
55+
- `ThemeProvider`: テーマ設定管理(ダークモード、Material You、純黒モード対応)
56+
- `TemplateProvider`: コードテンプレート管理 [19](#0-18)
57+
58+
### 画面間連携
59+
- WebViewから問題画面への遷移機能
60+
- 問題選択時のエディタ画面自動更新
61+
- 問題ID管理による画面同期 [20](#0-19)
62+
63+
## UI・UX特徴
64+
65+
### デザイン
66+
- Material Design 3準拠
67+
- 日本語フォント(Noto Sans JP)統一使用 [21](#0-20)
68+
- Dynamic Color(Material You)サポート
69+
- 純黒モード対応
70+
71+
### ナビゲーション
72+
- 半透明なBottomNavigationBar(ブラーエフェクト付き) [22](#0-21)
73+
- 触覚フィードバック対応 [23](#0-22)
74+
75+
## プラットフォーム対応
76+
Flutter クロスプラットフォーム対応により、以下のプラットフォームをサポート:
77+
- Android
78+
- iOS
79+
- Web
80+
- Windows
81+
- macOS
82+
- Linux [24](#0-23)
83+
84+
## Notes
85+
86+
このプロジェクトは、競技プログラミング愛好者がスマートフォンでAtCoderの問題を効率的に練習できるよう設計されています。WebスクレイピングによりAtCoderの問題データを取得し、モバイル最適化されたUIでコード編集から問題確認まで一貫した体験を提供します。現在開発中の機能もあり、特にホーム画面は将来の機能拡張に向けたプレースホルダーとなっています。

PRIVACY_POLICY.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# プライバシーポリシー
2+
3+
筑波大学附属中学校 電子電脳技術研究会(以下「当会」といいます。)は、当会が提供するアプリケーション「Shojin App」(以下「本アプリ」といいます。)における、ユーザーの個人情報の取扱いについて、以下のとおりプライバシーポリシー(以下「本ポリシー」といいます。)を定めます。
4+
5+
## 第1条(個人情報)
6+
7+
「個人情報」とは、個人情報保護法にいう「個人情報」を指すものとし、生存する個人に関する情報であって、当該情報に含まれる氏名、生年月日、住所、電話番号、連絡先その他の記述等により特定の個人を識別できる情報及び容貌、指紋、声紋にかかるデータ、及び健康保険証の保険者番号などの当該情報単体から特定の個人を識別できる情報(個人識別情報)を指します。
8+
9+
## 第2条(個人情報の収集方法)
10+
11+
本アプリは、ユーザーのAtCoder ID等、個人情報を収集することはありません。
12+
13+
## 第3条(個人情報を収集・利用する目的)
14+
15+
本アプリでは、個人情報を収集・利用することはありません。
16+
17+
## 第4条(利用目的の変更)
18+
19+
本ポリシーの内容は、法令その他本ポリシーに別段の定めのある事項を除いて、ユーザーに通知することなく、変更することができるものとします。
20+
当会が別途定める場合を除いて、変更後のプライバシーポリシーは,本ウェブサイトに掲載したときから効力を生じるものとします。
21+
22+
## 第5条(個人情報の第三者提供)
23+
24+
当会は、次に掲げる場合を除いて、あらかじめユーザーの同意を得ることなく、第三者に個人情報を提供することはありません。
25+
26+
1. 法令に基づく場合
27+
2. 人の生命、身体または財産の保護のために必要がある場合であって、本人の同意を得ることが困難であるとき
28+
3. 公衆衛生の向上または児童の健全な育成の推進のために特に必要がある場合であって、本人の同意を得ることが困難であるとき
29+
4. 国の機関もしくは地方公共団体またはその委託を受けた者が法令の定める事務を遂行することに対して協力する必要がある場合であって、本人の同意を得ることにより当該事務の遂行に支障を及ぼすおそれがあるとき
30+
31+
## 第6条(プライバシーポリシーの変更)
32+
33+
本ポリシーの内容は、ユーザーに通知することなく、変更することができるものとします。
34+
変更後のプライバシーポリシーは、本アプリまたは当会のウェブサイトに掲載したときから効力を生じるものとします。
35+
36+
## 第7条(お問い合わせ窓口)
37+
38+
本ポリシーに関するお問い合わせは、下記の連絡先までお願いいたします。
39+
40+
[GitHub Issues](https://github.com/tsukuba-denden/shojin_app/issues)
41+
42+
【2025年6月26日 制定】

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
# Shojin_App
22

33
[![Latest release](https://img.shields.io/github/v/release/tsukuba-denden/Shojin_App?include_prereleases)](https://github.com/tsukuba-denden/Shojin_App/releases)
4-
[![License](https://img.shields.io/github/license/tsukuba-denden/Shojin_App)](https://github.com/tsukuba-denden/shojin_app/tree/main?tab=MIT-1-ov-file)
4+
[![License](https://img.shields.io/github/license/tsukuba-denden/Shojin_App)](https://github.com/tsukuba-denden/shojin_app/tree/main?tab=MIT-1-ov-fil)
55
[![Downloads](https://img.shields.io/github/downloads/tsukuba-denden/Shojin_App/total)](https://github.com/tsukuba-denden/Shojin_App/releases)
6+
![Forks](https://img.shields.io/github/forks/tsukuba-denden/Shojin_App)
67
![code-size](https://img.shields.io/github/languages/code-size/yuubinnkyoku/yuubinnkyoku.github.io)
78
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/tsukuba-denden/shojin_app)
89
[![GitHub Stars](https://img.shields.io/github/stars/tsukuba-denden/shojin_app)](https://github.com/tsukuba-denden/shojin_app)
10+
[![Android Build](https://github.com/tsukuba-denden/shojin_app/actions/workflows/build.yaml/badge.svg)](https://github.com/tsukuba-denden/shojin_app/actions/workflows/build.yaml)
11+
![Issues](https://img.shields.io/github/issues/tsukuba-denden/Shojin_App)
12+
![Repo Size](https://img.shields.io/github/repo-size/tsukuba-denden/Shojin_App)
13+
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/tsukuba-denden/shojin_app)
914

1015

1116
[<img src="https://github.com/machiav3lli/oandbackupx/blob/034b226cea5c1b30eb4f6a6f313e4dadcbb0ece4/badge_github.png"

TERMS_OF_USE.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# 利用規約
2+
3+
この利用規約(以下,「本規約」といいます。)は、筑波大学附属中学校 電子電脳技術研究会(以下,「当会」といいます。)がこのアプリケーションで提供するサービス(以下,「本サービス」といいます。)の利用条件を定めるものです。ユーザーの皆さま(以下,「ユーザー」といいます。)には,本規約に従って,本サービスをご利用いただきます。
4+
5+
## 第1条(適用)
6+
7+
本規約は,ユーザーと当会との間の本サービスの利用に関わる一切の関係に適用されるものとします。
8+
9+
## 第2条(禁止事項)
10+
11+
ユーザーは,本サービスの利用にあたり,以下の行為をしてはなりません。
12+
13+
1. 法令または公序良俗に違反する行為
14+
2. 犯罪行為に関連する行為
15+
3. 当会のサーバーまたはネットワークの機能を破壊したり,妨害したりする行為
16+
4. 当会のサービスの運営を妨害するおそれのある行為
17+
5. 他のユーザーに関する個人情報等を収集または蓄積する行為
18+
6. 他のユーザーに成りすます行為
19+
7. 当会のサービスに関連して,反社会的勢力に対して直接または間接に利益を供与する行為
20+
8. その他,当会が不適切と判断する行為
21+
22+
## 第3条(本サービスの提供の停止等)
23+
24+
当会は,以下のいずれかの事由があると判断した場合,ユーザーに事前に通知することなく本サービスの全部または一部の提供を停止または中断することができるものとします。
25+
26+
1. 本サービスにかかるコンピュータシステムの保守点検または更新を行う場合
27+
2. 地震,落雷,火災,停電または天災などの不可抗力により,本サービスの提供が困難となった場合
28+
3. コンピュータまたは通信回線等が事故により停止した場合
29+
4. その他,当会が本サービスの提供が困難と判断した場合
30+
31+
当会は,本サービスの提供の停止または中断により,ユーザーまたは第三者が被ったいかなる不利益または損害について,理由を問わず一切の責任を負わないものとします。
32+
33+
## 第4.条(免責事項)
34+
35+
当会の債務不履行責任は,当会の故意または重過失によらない場合には免責されるものとします。
36+
当会は,何らかの理由によって責任を負う場合にも,通常生じうる損害の範囲内かつ有料サービスにおいては代金額(継続的サービスの場合には1か月分相当額)の範囲内においてのみ賠償の責任を負うものとします。
37+
当会は,本サービスに関して,ユーザーと他のユーザーまたは第三者との間において生じた取引,連絡または紛争等について一切責任を負いません。
38+
39+
## 第5条(サービス内容の変更等)
40+
41+
当会は,ユーザーに通知することなく,本サービスの内容を変更しまたは本サービスの提供を中止することができるものとし,これによってユーザーに生じた損害について一切の責任を負いません。
42+
43+
## 第6条(利用規約の変更)
44+
45+
当会は,必要と判断した場合には,ユーザーに通知することなくいつでも本規約を変更することができるものとします。なお,本規約の変更後,本サービスの利用を開始した場合には,当該ユーザーは変更後の規約に同意したものとみなします。
46+
47+
## 第7条(準拠法・裁判管轄)
48+
49+
本規約の解釈にあたっては,日本法を準拠法とします。
50+
本サービスに関して紛争が生じた場合には,当会の所在地を管轄する裁判所を専属的合意管轄とします。
51+
52+
以上
53+
54+
【2025年6月26日 制定】

android/app/build.gradle.kts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ android {
1313
compileOptions {
1414
sourceCompatibility = JavaVersion.VERSION_11
1515
targetCompatibility = JavaVersion.VERSION_11
16+
// Add the following line
17+
isCoreLibraryDesugaringEnabled = true
1618
}
1719

1820
kotlinOptions {
@@ -42,3 +44,8 @@ android {
4244
flutter {
4345
source = "../.."
4446
}
47+
48+
// Add the following block
49+
dependencies {
50+
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
51+
}

0 commit comments

Comments
 (0)