Skip to content

feat: [IMPLEMENT] タスクテーブル進捗列の追加#136

Merged
LevelCapTech merged 12 commits intomainfrom
copilot/add-progress-column-to-task-table
Mar 12, 2026
Merged

feat: [IMPLEMENT] タスクテーブル進捗列の追加#136
LevelCapTech merged 12 commits intomainfrom
copilot/add-progress-column-to-task-table

Conversation

Copy link
Contributor

Copilot AI commented Mar 11, 2026

概要(Summary)

このプルリクエストは .github/copilot/plans/133-task-table-progress-column-design.md に沿った実装変更です。
TaskList に progress の opt-in 列を追加し、step=5 の正規化と onCellCommit 通知を実装しました。

  • UI/列追加: 進捗列を終了日直後に追加し、列幅は終了日と同幅
  • 編集/commit: number 入力+5刻み丸め+0〜100クランプ、無効入力はエラー表示
  • テスト/ドキュメント: 回帰テスト追加、README/example で opt-in 設定を明記
  • 追記: progress 表示はクランプのみで行い、ガント側表示と整合させる(5刻み丸めは commit 時のみ)
const visibleFields: VisibleField[] = [
  "name",
  "start",
  "end",
  "progress",
  ...DEFAULT_VISIBLE_FIELDS.filter(field => !["name", "start", "end"].includes(field)),
];

<Gantt visibleFields={visibleFields} onCellCommit={onCellCommit} />;

背景・経緯(Context / Facts)


変更のインデックス(どのファイルをどう変えたか)

diffの目次(ファイル×変更概要)を下記のテーブルに記載します。

ファイル 変更概要(1行)
README.md progress 列 opt-in と丸め仕様の記述追加
example/src/App.tsx progress 列を visibleFields に追加し例を更新
src/types/public-types.ts VisibleField に progress を追加
src/helpers/task-helper.ts progress 正規化/表示/入力パースを追加
src/components/task-list/task-list.tsx progress commit 正規化と無効入力エラー
src/components/task-list/task-list-table.tsx progress 表示と編集対象に追加
src/components/task-list/task-list-header.tsx progress ヘッダラベル追加
src/components/task-list/overlay-editor.tsx progress の number 入力制約を追加
src/test/task-helper.test.tsx progress 正規化/パースのテスト追加
src/test/task-list-table-editing.test.tsx progress 表示と opt-in の回帰テスト
src/test/task-list-commit.test.tsx progress commit 正規化/無効入力テスト
src/test/overlay-editor.test.tsx progress 入力制約のテスト

実装の要点(Diffから読み取りづらい“事実”)

観点 記録
主要な追加/変更点(関数/クラス/モジュール単位) progress 正規化(format/parse/normalize)、TaskList commit の progress 分岐。追記: formatProgress はクランプのみで表示に使用
振る舞いが変わる入口(API/CLI/画面/バッチ/イベント) TaskList の progress セル編集(onCellCommit)
データ構造の変更点(型/スキーマ/テーブル/JSON) VisibleField に progress 追加(既存 Task.progress を利用)
互換性の扱い(後方互換/破壊的変更/互換レイヤ) DEFAULT_VISIBLE_FIELDS は維持、progress は opt-in

適用後に観測できる結果(観測ログ/確認ログ)

確認ログ(何を実行/何を目視したか)

確認項目 方法(実行/目視) 結果 根拠(ログ/URL/スクショ等)
progress 列の表示 目視 スクリーンショット提供 https://github.com/user-attachments/assets/0200f9b8-3e6c-417c-bbc3-d5280817f442
progress 編集 UI 目視 スクリーンショット提供 https://github.com/user-attachments/assets/0200f9b8-3e6c-417c-bbc3-d5280817f442

テストの実行状況(事実ログ)

種別 対象(パス/テスト名) 実行方法(コマンド/CI) 結果 根拠(ログ/URL等)
unit src/test/* npm run test:unit 成功 ローカル実行ログ
integration - - 未実施 -
e2e - - 未実施 -
lint/type src/**/* npm test 成功 ローカル実行ログ
build - npm run test:build 成功 ローカル実行ログ

エラーハンドリング・境界値の考慮事項(Error Handling / Boundary Conditions)

分類(error/boundary) ケース(入力/条件) 期待動作(仕様) 実装上の扱い(例外/戻り値/ログ/抑止) 確認方法(実行/目視/テスト) 結果 根拠(ログ/URL/スクショ等)
error progress 空文字/非数値 commit しない エラー表示・commit中断 テスト 成功 src/test/task-list-commit.test.tsx
boundary progress 0/100 そのまま確定 クランプ後に文字列通知 テスト 成功 src/test/task-helper.test.tsx
boundary progress 5刻み外 5刻み丸め Math.round で丸め テスト 成功 src/test/task-helper.test.tsx
boundary progress 表示 実値表示 0〜100 へクランプのみ テスト 成功 src/test/task-list-table-editing.test.tsx

影響範囲(どこに影響する/しないと言える根拠)

影響対象 結論 根拠
アプリケーション挙動 TaskList の progress opt-in 表示が追加 visibleFields に progress 指定時のみ表示
API契約(入力/出力/HTTP/エラー) 後方互換 VisibleField の追加のみ、既存 API は維持
データ互換(スキーマ/マイグレーション/既存データ) 影響なし Task.progress を流用
パフォーマンス(CPU/IO/レイテンシ) 影響軽微 テーブル表示の1列増加のみ
環境設定・デプロイ手順 影響なし 設定追加なし
監視・運用(ログ/メトリクス/アラート) 影響なし 新規ログなし

依存関係とコストへの影響(Dependencies / Cost Impact)

観点 対象(ライブラリ/サービス/API 等) 変更内容(追加/更新/削除/呼出増減 等) 影響(課金/性能/運用) 影響量(増減の見積/測定値) 根拠(計測/ログ/設定/差分)
依存 - 変更なし 影響なし 0 package.json
コスト - 変更なし 影響なし 0 該当なし

マイグレーション/ロールアウト(必要な場合のみ)

項目 記録
マイグレーション有無(DB/設定/データ) なし
手順(誰が/いつ/どこで/何を) なし
ロールバック方針(戻し方の事実) 進捗列追加コミットのリバート
互換期間/段階移行(フラグ/二重書き/旧API維持 等) なし

スコープ境界(触っていい/ダメ、非目標)

区分 範囲(パス/モジュール/設定など) 根拠
触ってよい範囲 src/components/task-list, src/helpers, README, example plan の想定変更対象
触ってはいけない範囲 Task.progress 概念/新イベント追加 plan の逸脱禁止
非目標(このPRではやらないこと) ガント側 progress 更新ロジック変更 Out of Scope

推論せず“質問に落とす”ための質問票(ADR/確認事項)

論点 / 質問 回答(事実のみ) 根拠(Issue/PR/Commit/ファイル等)
このPRで「決定」扱いにしたいことは何か?(なければ空欄) なし -
仕様上の未確定点(質問として列挙) なし -
追加の観測が必要な点(ログ/メトリクス等) なし -
レビュー観点で迷う点(代替案がある等) resolveProgressCommit/resolveActualsCommit の共通化 src/components/task-list/task-list.tsx

セキュリティ自己確認(Security Self-Check)

観点 結論 根拠(差分/ログ/設定/スクショ等)
Secrets(鍵/トークン/パスワード混入) なし 差分確認
入力検証(外部入力のバリデーション) あり parseProgressInput で検証・丸め
認可(権限チェック/境界) 対象外 UI内編集のみ
ログ(PII/秘密情報の出力) なし 追加ログなし

実装と確認のログ(何を触って、何を確認したか)

項目 記録
触った主要箇所(パス/関数/クラス等) task-list.tsx, task-list-table.tsx, overlay-editor.tsx, task-helper.ts
実装メモ(変更意図ではなく事実) progress 列表示・編集・commit 正規化を追加(表示はクランプのみ)
実行した確認(コマンド/手動操作/ログ等) npm test / npm run test:unit / npm audit / codeql_checker(追記: npm run test:build)
既知の未確認点(あれば) example のローカル UI 目視(React 二重読み込みにより未実施)

実行区分(AIが実行したこと/人間が追加で行うこと)

区分 タスク(何をする) 対象(どのサイト/システム) 実行場所(URL/画面/コマンド) 実行方法(どうやって) 入力(必要な情報) 出力(得られるもの/保存先) 証跡(ログ/URL/スクショ等)
AI 実装・テスト・セキュリティ確認 ローカル環境 npm test / npm run test:unit / npm audit / codeql_checker CLI なし ログ ローカルログ
AI UIスクリーンショット取得 GitHub 画像URL 参照 URL PR記載 https://github.com/user-attachments/assets/0200f9b8-3e6c-417c-bbc3-d5280817f442
AI build 確認 ローカル環境 npm run test:build CLI なし ログ ローカルログ
人間 example UI 目視確認 example app http://localhost:3001/gantt-task-react-custom ブラウザ なし 目視結果 -

補足(Notes)

  • npm audit は既存依存の脆弱性で失敗(今回の変更とは無関係)
  • example のローカル起動時に Invalid hook call が発生(React 二重読み込み由来)
  • スクリーンショットは提供URLを使用
  • 追記: CI失敗は formatProgress の未使用インポートが原因で、表示側の整理で解消

コードレビューフィードバック対応(Review Feedback Response)

このセクションは「追記」で管理します。

追記(今回分)

  • フィードバック(要約):progress 表示テストの値が丸め意図と不一致 対応(何を変えた):progress を 40 に揃えた 対象(ファイル/行/Commit):src/test/task-list-table-editing.test.tsx / 45eafcd 状態(対応済/保留/却下):対応済
  • フィードバック(要約):README の丸め表現が曖昧 対応(何を変えた):丸め説明を明確化 対象(ファイル/行/Commit):README.md / e2389d1 状態(対応済/保留/却下):対応済
  • フィードバック(要約):resolveProgressCommit/resolveActualsCommit の共通化提案 対応(何を変えた):最小変更優先で見送り 対象(ファイル/行/Commit):src/components/task-list/task-list.tsx 状態(対応済/保留/却下):保留
  • フィードバック(要約):progress 表示の丸めがガント表示と不整合 対応(何を変えた):表示はクランプのみ、commit 時の5刻み丸めは維持 対象(ファイル/行/Commit):src/helpers/task-helper.ts, src/components/task-list/task-list-table.tsx / f27358c, 88158b2 状態(対応済)

既存ログ(前回まで)

<<keep_existing_lines>>
Original prompt

>
> ----
>
> This section details on the original issue you should resolve
>
> <filter_complete></filter_complete>

<issue_title>[IMPLEMENT] タスクテーブル progress 入力列の実装</issue_title>
><issue_description># [IMPLEMENT] タスクテーブル progress 入力列の実装
>
> ## ゴール
> タスクテーブルに progress 入力列を追加する機能を、確定した設計 plan に従って実装する。
> CI品質ゲート(lint / typecheck / test / security)をすべて通過させる。
>
> ---
>
> ## 入力(確定plan)
>
> - 設計plan
> .github/copilot/plans/133-task-table-progress-column-design.md
>
> - 設計Issue
> #133
>
> - 設計Pull Request
> #134
>
> ---
>
> ## 実装対象の要点
>
> DESIGNで確定した仕様に従い、TaskList テーブルに progress 編集機能を追加する。
>
> 主な設計決定事項:
>
> - progress 列は opt-in
> - 列は 終了日列の直後に挿入
> - 列幅は 終了日列と同一
> - 入力粒度 step=5
> - commitイベント onCellCommit のみ
> - commit value は "0"〜"100" の文字列
> - progress データは 既存 Task.progress を利用
> - 新しい progress 概念は追加しない
>
> ---
>
> ## スコープ
>
> ### In Scope
>
> - TaskList テーブルへの progress 列追加
> - progress 値の表示
> - progress 値の編集
> - onCellCommit による変更通知
> - opt-in 表示制御
> - README / example 更新
>
> ### Out of Scope
>
> - progress データモデル変更
> - 新しいイベント追加
> - API / backend / persistence
> - ガント側 progress 更新ロジックの変更
>
> ---
>
> ## 変更許容範囲
>
> planからの逸脱は禁止。
>
> 以下の場合は DESIGN Issue に差し戻すこと
>
> - API変更が必要
> - progress 概念変更が必要
> - 新しいイベント追加が必要
> - public interface 変更が必要
>
> ---
>
> ## 受入条件
>
> DESIGN Issue で定義された受入条件を満たすこと。
>
> ### 機能
>
> Given progress列が存在しない現在のTaskList
> When progress列をopt-inで表示する
> Then TaskList に progress 編集可能な列が表示される
>
> Given progress列が表示されている
> When progress値を編集する
> Then step=5 の粒度で値が確定する
>
> Given progress値が変更された
> When commitが発生する
> Then onCellCommit が発火し value は "0"〜"100" の文字列で通知される
>
> ### 互換性
>
> Given 既存ユーザーが progress列を使用していない
> When 新バージョンを使用する
> Then デフォルトUIは変更されない
>
> ### UI整合性
>
> Given TaskList と Gantt 表示が存在する
> When TaskList 側で progress を更新する
> Then host の tasks 更新により Gantt 表示と整合する
>
> ---
>
> ## 実装タスク
>
> ### 実装
>
> - TaskList に progress 列追加
> - progress 値表示ロジック実装
> - progress 編集UI実装
> - step=5 入力制御実装
> - onCellCommit 通知接続
>
> ### 互換性
>
> - visibleFields opt-in制御
> - DEFAULT_VISIBLE_FIELDS 非変更
>
> ### ドキュメント
>
> - README 更新
> - example 更新
>
> ### テスト
>
> - progress 表示
> - progress 編集
> - commit通知
> - opt-in表示
>
> ---
>
> ## 必読
>
> - .github/copilot-instructions.md
> - .github/instructions/**/.instructions.md
> - .github/copilot/30-coding-standards.md
> - .github/copilot/50-security.md
> - .github/copilot/60-ci-quality-gates.md
>
> ---
>
> ## 参照(仕様SSOT)
>
> - .github/copilot/00-index.md
> - .github/copilot/10-requirements.md
> - .github/copilot/20-architecture.md
> - .github/copilot/40-testing-strategy.md
> - .github/copilot/60-ci-quality-gates.md
> - .github/copilot/80-templates/

>
> ---
>
> ## Done
>
> - CI品質ゲートがすべて緑
> - format
> - lint
> - typecheck
> - test
> - security
>
> - DESIGNで定義された受入条件をテストで担保
>
> - progress列が opt-in で動作
>
> - onCellCommit が仕様通り発火
>
> - README / example が更新されている
></issue_description>
>
> ## Comments on the Issue (you are @copilot in this section)
>
>
>
>

Original prompt

This section details on the original issue you should resolve

<issue_title>[IMPLEMENT] タスクテーブル progress 入力列の実装</issue_title>
<issue_description># [IMPLEMENT] タスクテーブル progress 入力列の実装

ゴール

タスクテーブルに progress 入力列を追加する機能を、確定した設計 plan に従って実装する。
CI品質ゲート(lint / typecheck / test / security)をすべて通過させる。


入力(確定plan)


実装対象の要点

DESIGNで確定した仕様に従い、TaskList テーブルに progress 編集機能を追加する。

主な設計決定事項:

  • progress 列は opt-in
  • 列は 終了日列の直後に挿入
  • 列幅は 終了日列と同一
  • 入力粒度 step=5
  • commitイベント onCellCommit のみ
  • commit value は "0"〜"100" の文字列
  • progress データは 既存 Task.progress を利用
  • 新しい progress 概念は追加しない

スコープ

In Scope

  • TaskList テーブルへの progress 列追加
  • progress 値の表示
  • progress 値の編集
  • onCellCommit による変更通知
  • opt-in 表示制御
  • README / example 更新

Out of Scope

  • progress データモデル変更
  • 新しいイベント追加
  • API / backend / persistence
  • ガント側 progress 更新ロジックの変更

変更許容範囲

planからの逸脱は禁止。

以下の場合は DESIGN Issue に差し戻すこと

  • API変更が必要
  • progress 概念変更が必要
  • 新しいイベント追加が必要
  • public interface 変更が必要

受入条件

DESIGN Issue で定義された受入条件を満たすこと。

機能

Given progress列が存在しない現在のTaskList
When progress列をopt-inで表示する
Then TaskList に progress 編集可能な列が表示される

Given progress列が表示されている
When progress値を編集する
Then step=5 の粒度で値が確定する

Given progress値が変更された
When commitが発生する
Then onCellCommit が発火し value は "0"〜"100" の文字列で通知される

互換性

Given 既存ユーザーが progress列を使用していない
When 新バージョンを使用する
Then デフォルトUIは変更されない

UI整合性

Given TaskList と Gantt 表示が存在する
When TaskList 側で progress を更新する
Then host の tasks 更新により Gantt 表示と整合する


実装タスク

実装

  • TaskList に progress 列追加
  • progress 値表示ロジック実装
  • progress 編集UI実装
  • step=5 入力制御実装
  • onCellCommit 通知接続

互換性

  • visibleFields opt-in制御
  • DEFAULT_VISIBLE_FIELDS 非変更

ドキュメント

  • README 更新
  • example 更新

テスト

  • progress 表示
  • progress 編集
  • commit通知
  • opt-in表示

必読

  • .github/copilot-instructions.md
  • .github/instructions/**/*.instructions.md
  • .github/copilot/30-coding-standards.md
  • .github/copilot/50-security.md
  • .github/copilot/60-ci-quality-gates.md

参照(仕様SSOT)

  • .github/copilot/00-index.md
  • .github/copilot/10-requirements.md
  • .github/copilot/20-architecture.md
  • .github/copilot/40-testing-strategy.md
  • .github/copilot/60-ci-quality-gates.md
  • .github/copilot/80-templates/*

Done

  • CI品質ゲートがすべて緑

    • format
    • lint
    • typecheck
    • test
    • security
  • DESIGNで定義された受入条件をテストで担保

  • progress列が opt-in で動作

  • onCellCommit が仕様通り発火

  • README / example が更新されている
    </issue_description>

Comments on the Issue (you are @copilot in this section)


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI and others added 8 commits March 11, 2026 04:51
タスクテーブルに進捗列の表示と編集を追加し、step=5のcommit正規化を実装する。
opt-in表示を維持し、READMEとexampleの利用例を更新する。

Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com>
依存関係変更がないためpackage-lockの更新を取り消し、差分を最小化する。
実装内容と無関係な生成物がPRに混在しないように調整する。

Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com>
visibleFieldsのベース列と数値系コミット処理を共通化し、重複を削減する。
挙動は変更せず、サンプルの可読性と保守性を高める。

Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com>
進捗表示テストの意図が明確になるよう値を揃え、サンプルの基準列用途を補足した。
機能挙動は維持しつつレビュー指摘への対応を行う。

Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com>
VISIBLE_FIELDS_WITH_PROGRESSの構築時にprogress重複を避けるよう除外条件を補強する。
将来DEFAULT_VISIBLE_FIELDSに変更があっても意図した表示順を維持する。

Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com>
progress正規化の型前提に合わせてチェックを簡素化し、READMEの丸め表現を明確化する。
サンプルのコメント表現も進捗列の構成に合わせて整理する。

Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com>
サンプルの基準列コメントを自然な表現に整え、不要な進捗除外条件を削除する。
仕様には影響しないが、読みやすさを維持する。

Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com>
基準列コメントをより自然な表現に整え、サンプルの可読性を高める。
機能の挙動は変更しない。

Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com>
Copilot AI changed the title [WIP] Implement progress input column for task table feat: タスクテーブル進捗列の追加 Mar 11, 2026
@LevelCapTech LevelCapTech changed the title feat: タスクテーブル進捗列の追加 [IMPLEMENT] feat: タスクテーブル進捗列の追加 Mar 12, 2026
@LevelCapTech LevelCapTech changed the title [IMPLEMENT] feat: タスクテーブル進捗列の追加 feat: [IMPLEMENT] タスクテーブル進捗列の追加 Mar 12, 2026
@LevelCapTech LevelCapTech added the ✨ 新機能 新しい機能の提案や要求に適用します。新規アイデアや機能拡張に関するイシューやプルリクエスト。 label Mar 12, 2026
@LevelCapTech LevelCapTech marked this pull request as ready for review March 12, 2026 10:34
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

TaskList に progress(進捗)列を opt-in で追加し、編集時に step=5 正規化 + 0〜100 クランプを行った上で onCellCommit に文字列で通知できるようにする実装PRです。

Changes:

  • VisibleField"progress" を追加し、TaskList の表示/ヘッダ/編集対象として progress 列を追加
  • progress 入力のパース/正規化ロジック(丸め・クランプ・無効判定)を実装し、commit 時に適用
  • progress の opt-in 表示、commit 正規化、入力制約の回帰テストと README/example の利用例を追加

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
README.md progress 列が opt-in であることと commit 仕様(5刻み・文字列通知)を追記
example/src/App.tsx visibleFields の例を progress 列 opt-in 構成に更新
src/types/public-types.ts VisibleFieldprogress を追加
src/helpers/task-helper.ts progress の normalize/format/parse を追加
src/components/task-list/task-list.tsx progress commit の正規化・無効入力時のエラー表示を追加
src/components/task-list/task-list-table.tsx progress 列の表示と編集対象化を追加
src/components/task-list/task-list-header.tsx progress のヘッダラベルを追加
src/components/task-list/overlay-editor.tsx progress 入力の min/max/step 制約を追加
src/test/task-helper.test.tsx progress helper のユニットテストを追加
src/test/task-list-table-editing.test.tsx progress 列表示と opt-in 非表示の回帰テストを追加
src/test/task-list-commit.test.tsx progress commit 正規化/無効入力のテストを追加
src/test/overlay-editor.test.tsx progress の number input 制約のテストを追加

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@LevelCapTech
Copy link
Owner

@copilot apply changes based on the comments in this thread

PR本文は維持。既存本文の削除/置換は禁止。必要情報はPR本文末尾の コードレビューフィードバック対応の追記セクション に追記すること。

Copilot AI and others added 2 commits March 12, 2026 10:47
進捗列の表示は実値(クランプのみ)にし、ガント表示との不整合を解消する。
関連テストの期待値も実値に合わせて更新する。

Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com>
進捗列の表示はformatProgressに統一し、表示側はクランプのみでガント表示と整合させる。
補足コメントをJSDoc化して意図を明確化する。

Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Mar 12, 2026

@copilot apply changes based on the comments in this thread

PR本文は維持。既存本文の削��...

進捗表示の丸めを解除し、表示はクランプのみ・commit時の5刻み丸めは維持するよう更新しました。関連テストも実値表示に合わせて調整しています。対応コミット: f27358c, 88158b2。スクリーンショット: https://github.com/user-attachments/assets/0200f9b8-3e6c-417c-bbc3-d5280817f442

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 12 out of 12 changed files in this pull request and generated no new comments.

@LevelCapTech LevelCapTech merged commit a40e60d into main Mar 12, 2026
5 checks passed
@LevelCapTech LevelCapTech deleted the copilot/add-progress-column-to-task-table branch March 12, 2026 11:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ 新機能 新しい機能の提案や要求に適用します。新規アイデアや機能拡張に関するイシューやプルリクエスト。

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[IMPLEMENT] タスクテーブル progress 入力列の実装

3 participants