@newpeak/barista-cli 0.1.14 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.ja.md +211 -579
  2. package/README.md +208 -643
  3. package/README.vi.md +212 -586
  4. package/README.zh.md +340 -0
  5. package/dist/commands/arabica/access/index.d.ts +3 -0
  6. package/dist/commands/arabica/access/index.d.ts.map +1 -0
  7. package/dist/commands/arabica/access/index.js +15 -0
  8. package/dist/commands/arabica/access/index.js.map +1 -0
  9. package/dist/commands/arabica/access/url.d.ts +3 -0
  10. package/dist/commands/arabica/access/url.d.ts.map +1 -0
  11. package/dist/commands/arabica/access/url.js +101 -0
  12. package/dist/commands/arabica/access/url.js.map +1 -0
  13. package/dist/commands/arabica/auth/index.d.ts.map +1 -1
  14. package/dist/commands/arabica/auth/index.js +24 -5
  15. package/dist/commands/arabica/auth/index.js.map +1 -1
  16. package/dist/commands/arabica/enterprise/get.d.ts +3 -0
  17. package/dist/commands/arabica/enterprise/get.d.ts.map +1 -0
  18. package/dist/commands/arabica/enterprise/get.js +94 -0
  19. package/dist/commands/arabica/enterprise/get.js.map +1 -0
  20. package/dist/commands/arabica/enterprise/index.d.ts +3 -0
  21. package/dist/commands/arabica/enterprise/index.d.ts.map +1 -0
  22. package/dist/commands/arabica/enterprise/index.js +18 -0
  23. package/dist/commands/arabica/enterprise/index.js.map +1 -0
  24. package/dist/commands/arabica/enterprise/list.d.ts +3 -0
  25. package/dist/commands/arabica/enterprise/list.d.ts.map +1 -0
  26. package/dist/commands/arabica/enterprise/list.js +71 -0
  27. package/dist/commands/arabica/enterprise/list.js.map +1 -0
  28. package/dist/commands/arabica/enterprises/delete.d.ts +3 -0
  29. package/dist/commands/arabica/enterprises/delete.d.ts.map +1 -0
  30. package/dist/commands/arabica/enterprises/delete.js +89 -0
  31. package/dist/commands/arabica/enterprises/delete.js.map +1 -0
  32. package/dist/commands/arabica/enterprises/get.d.ts +3 -0
  33. package/dist/commands/arabica/enterprises/get.d.ts.map +1 -0
  34. package/dist/commands/arabica/enterprises/get.js +103 -0
  35. package/dist/commands/arabica/enterprises/get.js.map +1 -0
  36. package/dist/commands/arabica/enterprises/index.d.ts +3 -0
  37. package/dist/commands/arabica/enterprises/index.d.ts.map +1 -0
  38. package/dist/commands/arabica/enterprises/index.js +27 -0
  39. package/dist/commands/arabica/enterprises/index.js.map +1 -0
  40. package/dist/commands/arabica/enterprises/list.d.ts +3 -0
  41. package/dist/commands/arabica/enterprises/list.d.ts.map +1 -0
  42. package/dist/commands/arabica/enterprises/list.js +84 -0
  43. package/dist/commands/arabica/enterprises/list.js.map +1 -0
  44. package/dist/commands/arabica/enterprises/register.d.ts +3 -0
  45. package/dist/commands/arabica/enterprises/register.d.ts.map +1 -0
  46. package/dist/commands/arabica/enterprises/register.js +175 -0
  47. package/dist/commands/arabica/enterprises/register.js.map +1 -0
  48. package/dist/commands/arabica/enterprises/update.d.ts +3 -0
  49. package/dist/commands/arabica/enterprises/update.d.ts.map +1 -0
  50. package/dist/commands/arabica/enterprises/update.js +130 -0
  51. package/dist/commands/arabica/enterprises/update.js.map +1 -0
  52. package/dist/commands/arabica/index.d.ts.map +1 -1
  53. package/dist/commands/arabica/index.js +17 -4
  54. package/dist/commands/arabica/index.js.map +1 -1
  55. package/dist/commands/arabica/invoices/download.d.ts +3 -0
  56. package/dist/commands/arabica/invoices/download.d.ts.map +1 -0
  57. package/dist/commands/arabica/invoices/download.js +55 -0
  58. package/dist/commands/arabica/invoices/download.js.map +1 -0
  59. package/dist/commands/arabica/invoices/get.d.ts +3 -0
  60. package/dist/commands/arabica/invoices/get.d.ts.map +1 -0
  61. package/dist/commands/arabica/invoices/get.js +53 -0
  62. package/dist/commands/arabica/invoices/get.js.map +1 -0
  63. package/dist/commands/arabica/invoices/index.d.ts +3 -0
  64. package/dist/commands/arabica/invoices/index.d.ts.map +1 -0
  65. package/dist/commands/arabica/invoices/index.js +21 -0
  66. package/dist/commands/arabica/invoices/index.js.map +1 -0
  67. package/dist/commands/arabica/invoices/list.d.ts +3 -0
  68. package/dist/commands/arabica/invoices/list.d.ts.map +1 -0
  69. package/dist/commands/arabica/invoices/list.js +75 -0
  70. package/dist/commands/arabica/invoices/list.js.map +1 -0
  71. package/dist/commands/arabica/orders/cancel.d.ts +3 -0
  72. package/dist/commands/arabica/orders/cancel.d.ts.map +1 -0
  73. package/dist/commands/arabica/orders/cancel.js +133 -0
  74. package/dist/commands/arabica/orders/cancel.js.map +1 -0
  75. package/dist/commands/arabica/orders/get.d.ts +3 -0
  76. package/dist/commands/arabica/orders/get.d.ts.map +1 -0
  77. package/dist/commands/arabica/orders/get.js +145 -0
  78. package/dist/commands/arabica/orders/get.js.map +1 -0
  79. package/dist/commands/arabica/orders/index.d.ts +3 -0
  80. package/dist/commands/arabica/orders/index.d.ts.map +1 -0
  81. package/dist/commands/arabica/orders/index.js +24 -0
  82. package/dist/commands/arabica/orders/index.js.map +1 -0
  83. package/dist/commands/arabica/orders/list.d.ts +3 -0
  84. package/dist/commands/arabica/orders/list.d.ts.map +1 -0
  85. package/dist/commands/arabica/orders/list.js +111 -0
  86. package/dist/commands/arabica/orders/list.js.map +1 -0
  87. package/dist/commands/arabica/orders/submit.d.ts +3 -0
  88. package/dist/commands/arabica/orders/submit.d.ts.map +1 -0
  89. package/dist/commands/arabica/orders/submit.js +221 -0
  90. package/dist/commands/arabica/orders/submit.js.map +1 -0
  91. package/dist/commands/arabica/plans/compare.d.ts +3 -0
  92. package/dist/commands/arabica/plans/compare.d.ts.map +1 -0
  93. package/dist/commands/arabica/plans/compare.js +115 -0
  94. package/dist/commands/arabica/plans/compare.js.map +1 -0
  95. package/dist/commands/arabica/plans/get.d.ts +3 -0
  96. package/dist/commands/arabica/plans/get.d.ts.map +1 -0
  97. package/dist/commands/arabica/plans/get.js +94 -0
  98. package/dist/commands/arabica/plans/get.js.map +1 -0
  99. package/dist/commands/arabica/plans/index.d.ts +3 -0
  100. package/dist/commands/arabica/plans/index.d.ts.map +1 -0
  101. package/dist/commands/arabica/plans/index.js +21 -0
  102. package/dist/commands/arabica/plans/index.js.map +1 -0
  103. package/dist/commands/arabica/plans/list.d.ts +3 -0
  104. package/dist/commands/arabica/plans/list.d.ts.map +1 -0
  105. package/dist/commands/arabica/plans/list.js +69 -0
  106. package/dist/commands/arabica/plans/list.js.map +1 -0
  107. package/dist/commands/arabica/subscription/current.d.ts +3 -0
  108. package/dist/commands/arabica/subscription/current.d.ts.map +1 -0
  109. package/dist/commands/arabica/subscription/current.js +76 -0
  110. package/dist/commands/arabica/subscription/current.js.map +1 -0
  111. package/dist/commands/arabica/subscription/index.d.ts +3 -0
  112. package/dist/commands/arabica/subscription/index.d.ts.map +1 -0
  113. package/dist/commands/arabica/subscription/index.js +15 -0
  114. package/dist/commands/arabica/subscription/index.js.map +1 -0
  115. package/dist/commands/liberica/orgs/batch-delete.d.ts +3 -0
  116. package/dist/commands/liberica/orgs/batch-delete.d.ts.map +1 -0
  117. package/dist/commands/liberica/orgs/batch-delete.js +109 -0
  118. package/dist/commands/liberica/orgs/batch-delete.js.map +1 -0
  119. package/dist/commands/liberica/orgs/create.d.ts +3 -0
  120. package/dist/commands/liberica/orgs/create.d.ts.map +1 -0
  121. package/dist/commands/liberica/orgs/create.js +131 -0
  122. package/dist/commands/liberica/orgs/create.js.map +1 -0
  123. package/dist/commands/liberica/orgs/disable.d.ts +3 -0
  124. package/dist/commands/liberica/orgs/disable.d.ts.map +1 -0
  125. package/dist/commands/liberica/orgs/disable.js +98 -0
  126. package/dist/commands/liberica/orgs/disable.js.map +1 -0
  127. package/dist/commands/liberica/orgs/enable.d.ts +3 -0
  128. package/dist/commands/liberica/orgs/enable.d.ts.map +1 -0
  129. package/dist/commands/liberica/orgs/enable.js +98 -0
  130. package/dist/commands/liberica/orgs/enable.js.map +1 -0
  131. package/dist/commands/liberica/orgs/get.d.ts +3 -0
  132. package/dist/commands/liberica/orgs/get.d.ts.map +1 -0
  133. package/dist/commands/liberica/orgs/get.js +79 -0
  134. package/dist/commands/liberica/orgs/get.js.map +1 -0
  135. package/dist/commands/liberica/orgs/index.d.ts.map +1 -1
  136. package/dist/commands/liberica/orgs/index.js +15 -21
  137. package/dist/commands/liberica/orgs/index.js.map +1 -1
  138. package/dist/commands/liberica/orgs/list.d.ts +3 -0
  139. package/dist/commands/liberica/orgs/list.d.ts.map +1 -0
  140. package/dist/commands/liberica/orgs/list.js +51 -0
  141. package/dist/commands/liberica/orgs/list.js.map +1 -0
  142. package/dist/commands/liberica/orgs/update.d.ts +3 -0
  143. package/dist/commands/liberica/orgs/update.d.ts.map +1 -0
  144. package/dist/commands/liberica/orgs/update.js +136 -0
  145. package/dist/commands/liberica/orgs/update.js.map +1 -0
  146. package/dist/core/api/client.d.ts +78 -1
  147. package/dist/core/api/client.d.ts.map +1 -1
  148. package/dist/core/api/client.js +832 -76
  149. package/dist/core/api/client.js.map +1 -1
  150. package/dist/index.js +1 -1
  151. package/dist/types/enterprise.d.ts +60 -0
  152. package/dist/types/enterprise.d.ts.map +1 -0
  153. package/dist/types/enterprise.js +5 -0
  154. package/dist/types/enterprise.js.map +1 -0
  155. package/dist/types/index.d.ts +3 -0
  156. package/dist/types/index.d.ts.map +1 -1
  157. package/dist/types/index.js +3 -0
  158. package/dist/types/index.js.map +1 -1
  159. package/dist/types/invoice.d.ts +39 -0
  160. package/dist/types/invoice.d.ts.map +1 -0
  161. package/dist/types/invoice.js +5 -0
  162. package/dist/types/invoice.js.map +1 -0
  163. package/dist/types/member-product.d.ts +53 -0
  164. package/dist/types/member-product.d.ts.map +1 -0
  165. package/dist/types/member-product.js +2 -0
  166. package/dist/types/member-product.js.map +1 -0
  167. package/dist/types/order.d.ts +108 -0
  168. package/dist/types/order.d.ts.map +1 -0
  169. package/dist/types/order.js +5 -0
  170. package/dist/types/order.js.map +1 -0
  171. package/dist/types/org.d.ts +38 -0
  172. package/dist/types/org.d.ts.map +1 -1
  173. package/dist/types/subscription.d.ts +35 -0
  174. package/dist/types/subscription.d.ts.map +1 -0
  175. package/dist/types/subscription.js +5 -0
  176. package/dist/types/subscription.js.map +1 -0
  177. package/package.json +1 -1
  178. package/README.en.md +0 -714
package/README.ja.md CHANGED
@@ -1,455 +1,268 @@
1
1
  # ☕ Barista CLI
2
2
 
3
- <p align="center">
4
- <a href="./README.md"><img src="https://img.shields.io/badge/-简体中文-green?style=flat-square" alt="简体中文"></a>
5
- <a href="./README.en.md"><img src="https://img.shields.io/badge/-English-blue?style=flat-square" alt="English"></a>
6
- <a href="./README.ja.md"><img src="https://img.shields.io/badge/-日本語-red?style=flat-square" alt="日本語"></a>
7
- <a href="./README.vi.md"><img src="https://img.shields.io/badge/-Tiếng%20Việt-green?style=flat-square" alt="Tiếng Việt"></a>
8
- </p>
9
-
10
- <p align="center">
11
- <img src="https://img.shields.io/badge/AI--Native-CLI-blue?style=flat-square" alt="AI-Native">
12
- <img src="https://img.shields.io/badge/Liberica-Production%20SaaS-green?style=flat-square" alt="Liberica">
13
- <img src="https://img.shields.io/badge/Arabica-Sales%20Platform-orange?style=flat-square" alt="Arabica">
14
- <img src="https://img.shields.io/badge/Node.js-18%2B-brightgreen?style=flat-square" alt="Node.js 18+">
15
- </p>
16
-
17
- <p align="center">
18
- <strong>AI-Native CLI ツール</strong> - Liberica 生産管理 SaaS と Arabica 販売プラットフォームをシームレスに連携
19
- </p>
3
+ > **AIアシスタントに生産管理システムを操作させる** — AIツール(Claude Code、OpenCode、OpenClaw)と企業向けSaaSを連携
20
4
 
21
- ---
22
-
23
- ## 📋 目次
24
-
25
- - [プロジェクト概要](#プロジェクト概要)
26
- - [クイックスタート](#クイックスタート)
27
- - [アーキテクチャ設計](#アーキテクチャ設計)
28
- - [コマンドドキュメント](#コマンドドキュメント)
29
- - [高度な機能](#高度な機能)
30
- - [設定説明](#設定説明)
31
- - [AI 統合](#ai-統合)
32
- - [開発ガイド](#開発ガイド)
33
- - [貢献ガイド](#貢献ガイド)
34
-
35
- ---
36
-
37
- ## プロジェクト概要
38
-
39
- Barista CLI は、Newpeak エコシステム専用に設計された AI-Native コマンドラインツールです。Liberica 生産管理 SaaS と Arabica 販売プラットフォームを管理するための統一インターフェースを提供します。
40
-
41
- ### コア機能
42
-
43
- | 機能 | 説明 |
44
- |------|------|
45
- | 🌍 **マルチ環境サポート** | dev、test、prod-cn、prod-jp の4環境をシームレスに切り替え |
46
- | 🏢 **マルチテナントアーキテクチャ** | マルチテナント環境設定と分離をサポート |
47
- | 🔐 **トークン認証** | システムキーチェーンに安全に保存、環境分離 |
48
- | 🧪 **Dry-Run モード** | すべての書き込み操作でプレビューをサポート、誤操作防止 |
49
- | 🤖 **AI 統合** | Claude Code 向けに最適化された JSON 出力形式 |
50
- | 🔄 **クロスサービス操作** | Liberica と Arabica 間のデータ同期 |
51
-
52
- ### 使用シナリオ
53
-
54
- - **生産計画管理**: 製造オーダーの作成、照会、キャンセル
55
- - **製品データ管理**: プラットフォーム横断の製品検索、情報同期
56
- - **顧客操作**: 顧客情報の照会、見積書の生成
57
- - **AI 自動化**: Claude Code を通じた業務プロセスの自動化
5
+ [![npm version](https://img.shields.io/npm/v/@newpeak/barista-cli.svg?style=flat-square)](https://www.npmjs.com/package/@newpeak/barista-cli)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg?style=flat-square)](LICENSE)
7
+ [![Weekly Downloads](https://img.shields.io/npm/dw/@newpeak/barista-cli?style=flat-square)](https://www.npmjs.com/package/@newpeak/barista-cli)
8
+ [![Node.js](https://img.shields.io/badge/Node.js-18%2B-brightgreen?style=flat-square)](https://nodejs.org/)
58
9
 
59
10
  ---
60
11
 
61
- ## クイックスタート
12
+ ## クイックスタート
62
13
 
63
- ### インストール
14
+ ### 1. インストール
64
15
 
65
16
  ```bash
66
- # npm でインストール
67
17
  npm install -g @newpeak/barista-cli
68
-
69
- # または yarn で
70
- yarn global add @newpeak/barista-cli
71
-
72
- # インストール確認
73
- barista --version
74
18
  ```
75
19
 
76
- ### 初期設定
20
+ ### 2. 認証
77
21
 
78
22
  ```bash
79
- # 1. 設定ディレクトリを初期化
80
- barista init
81
-
82
- # 2. 環境を設定(デフォルト環境を選択)
83
- barista context use-env dev
84
-
85
- # 3. テナントを設定
86
- barista context use-tenant your-tenant
87
-
88
- # 4. ログインしてトークンを取得
89
- barista auth login --service liberica --env dev
23
+ # AIはユーザーの代わりに操作するために認証情報が必要です
24
+ barista liberica auth login prod-cn your-tenant your-username your-password
90
25
 
91
- # 5. ログイン状態を確認
92
- barista auth status
26
+ # インタラクティブログイン(不足情報の入力を促す)
27
+ barista liberica auth login
93
28
  ```
94
29
 
95
- ### 基本的な使用例
96
-
97
- ```bash
98
- # 現在のコンテキストを表示
99
- barista context show
100
-
101
- # すべてのオーダーを一覧表示(Liberica)
102
- barista liberica orders list
30
+ ### 3. AI統合
103
31
 
104
- # 製品を検索(あいまい検索対応)
105
- barista liberica products search --keyword "コーヒー機"
106
-
107
- # Arabica 製品カタログを表示
108
- barista arabica products public-catalog
32
+ ```typescript
33
+ // Claude Code / OpenCode / OpenClaw 内:
34
+ const orders = await $`barista liberica orders list --env prod-cn --tenant your-tenant --json`
35
+ const { success, data } = JSON.parse(orders.stdout)
109
36
 
110
- # 製造オーダーを作成(dry-run モードでプレビュー)
111
- barista liberica orders create --product-id 123 --quantity 100 --dry-run
37
+ // AIがデータを解析して操作
38
+ if (data.items.length > 0) {
39
+ console.log(`Found ${data.pagination.total} orders`)
40
+ }
112
41
  ```
113
42
 
43
+ **[AI統合の例を見る →](#ai-integration)**
44
+
114
45
  ---
115
46
 
116
- ## アーキテクチャ設計
47
+ ## 🤖 AI統合
117
48
 
118
- ### 環境マッピング
49
+ Barista CLIはAIコーディングアシスタント向けに設計されています。すべての出力は構造化され、すべてのエラーは対処可能です。
119
50
 
120
- #### Liberica(生産管理 SaaS)
51
+ ### 対応AIツール
121
52
 
122
- | 環境 | ドメイン形式 | 説明 |
123
- |------|-------------|------|
124
- | dev | `{tenant}-dev.newpeaksh.com` | 開発環境 |
125
- | test | `{tenant}-test.newpeaksh.com` | テスト環境 |
126
- | prod-cn | `{tenant}.newpeaksh.com` | 中国本番環境 |
127
- | prod-jp | `{tenant}.newpeakjp.com` | 日本本番環境 |
53
+ | AIツール | 連携方法 | ステータス |
54
+ |---------|---------|-----------|
55
+ | **Claude Code** | `$` バッククォート + `--json` | 検証済み |
56
+ | **OpenCode** | シェルコマンド + JSON解析 | 検証済み |
57
+ | **OpenClaw** | シェルコマンド + JSON解析 | 検証済み |
58
+ | **Cursor** | ターミナル連携 | 対応 |
59
+ | **Continue** | CLIサブプロセス | ✅ 対応 |
128
60
 
129
- #### Arabica(販売プラットフォーム)
61
+ ### 連携パターン
130
62
 
131
- | 環境 | ドメイン | 説明 |
132
- |------|---------|------|
133
- | dev | `arabica-dev.newpeaksh.com` | 開発環境 |
134
- | test | `arabica-test.newpeaksh.com` | テスト環境 |
135
- | prod-cn | `www.newpeaksh.com` | 中国本番環境 |
136
- | prod-jp | `members.newpeakjp.com` | 日本本番環境 |
63
+ ```typescript
64
+ // 1. JSON出力でコマンド実行
65
+ const result = await $`barista liberica orders list \
66
+ --env prod-cn \
67
+ --tenant your-tenant \
68
+ --status pending \
69
+ --json \
70
+ --page 1 \
71
+ --size 50`
72
+
73
+ // 2. 構造化レスポンスを解析
74
+ const { success, data, meta } = JSON.parse(result.stdout)
75
+
76
+ if (!success) {
77
+ throw new Error(`API Error: ${meta.code || meta.error?.code} - ${meta.message || meta.error?.message}`)
78
+ }
137
79
 
138
- ### 認証メカニズム
80
+ // 3. データを処理
81
+ const pendingOrders = data.items
82
+ console.log(`Found ${data.pagination.total} pending orders`)
139
83
 
140
- Barista CLI はトークンベースの認証メカニズムを採用しています:
84
+ // 4. 安全に変更を実行
85
+ for (const order of pendingOrders) {
86
+ // 常にまずドライラン(AI安全確保)
87
+ const preview = await $`barista liberica orders cancel ${order.id} --dry-run`
141
88
 
89
+ // プレビューを解析、検証、--forceで実行
90
+ // ...
91
+ }
142
92
  ```
143
- ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
144
- │ Barista CLI │────▶│ Auth Server │────▶│ API Servers │
145
- │ │ │ │ │ │
146
- │ • ログイン要求 │ │ • 認証情報確認 │ │ • トークン確認 │
147
- │ • トークン保存 │◀────│ • JWT 発行 │◀────│ • データ返却 │
148
- │ (キーチェーン)│ │ │ │ │
149
- └─────────────────┘ └──────────────────┘ └─────────────────┘
150
- ```
151
-
152
- **セキュリティ機能:**
153
-
154
- - **キーチェーン保存**: トークンはシステムキーチェーン(macOS Keychain、Windows Credential、Linux Secret Service)に安全に保存
155
- - **自動認証スキップ**: 公開インターフェース(製品カタログ照会など)は認証不要
156
- - **環境分離**: 各環境とテナントは独立したトークンを使用、相互に影響なし
157
- - **トークン更新**: 有効期限が近づいたトークンの自動更新をサポート
158
-
159
- ---
160
-
161
- ## コマンドドキュメント
162
93
 
163
- > **完全なコマンドリファレンス**: すべてのコマンド(実装済みおよび開発予定)の完全なリファレンスは [コマンドリファレンス](./docs/commands/REFERENCE.md) を参照してください。
94
+ ### レスポンスエンベロープ
164
95
 
165
- ### コマンド構造
96
+ すべてのJSONレスポンスは以下の構造に従います:
166
97
 
167
- ```
168
- barista <service> <resource> <action> [options]
98
+ ```json
99
+ {
100
+ "success": true,
101
+ "data": {
102
+ "items": [...],
103
+ "pagination": { "page": 1, "size": 20, "total": 150 }
104
+ },
105
+ "meta": {
106
+ "requestId": "req-abc123",
107
+ "timestamp": "2024-01-15T10:30:00Z",
108
+ "environment": "prod-cn",
109
+ "tenant": "your-tenant"
110
+ }
111
+ }
169
112
  ```
170
113
 
171
- **例:**
114
+ **エラー形式:**
172
115
 
173
- ```bash
174
- barista liberica orders list --page 1 --size 20
175
- barista arabica quotes calculate --product-id 123 --quantity 10
116
+ ```json
117
+ {
118
+ "success": false,
119
+ "error": {
120
+ "code": "A150001",
121
+ "message": "Order not found"
122
+ },
123
+ "meta": {
124
+ "requestId": "req-xyz789",
125
+ "timestamp": "2024-01-15T10:30:00Z"
126
+ }
127
+ }
176
128
  ```
177
129
 
178
- ### グローバルオプション
179
-
180
- | オプション | 説明 | 例 |
181
- |----------|------|-----|
182
- | `--env` | 環境を指定 | `--env prod-cn` |
183
- | `--tenant` | テナントを指定 | `--tenant electionjp` |
184
- | `--service` | サービスを指定 | `--service liberica` |
185
- | `--dry-run` | プレビューモード | `--dry-run` |
186
- | `--json` | JSON 出力 | `--json` |
187
- | `--help` | ヘルプを表示 | `--help` |
188
-
189
- ### コンテキスト管理
130
+ ### Claude Code用スキル
190
131
 
191
- コンテキスト管理は、作業環境を素早く切り替えるために使用され、すべてのコマンドで環境パラメータを指定する必要がありません。
132
+ 再利用者スキルファイルをインストール:
192
133
 
193
134
  ```bash
194
- # 現在のコンテキストを表示
195
- barista context show
196
-
197
- # 出力例:
198
- # ┌─────────────┬─────────────────┐
199
- # │ 属性 │ 値 │
200
- # ├─────────────┼─────────────────┤
201
- # │ 現在の環境 │ dev │
202
- # │ 現在のテナント│ electionjp │
203
- # │ 現在のサービス│ liberica │
204
- # │ トークン状態│ ログイン済み │
205
- # │ トークン有効期限│ 2024-12-31 │
206
- # └─────────────┴─────────────────┘
207
-
208
- # 環境を切り替え
209
- barista context use-env [dev|test|prod-cn|prod-jp]
210
-
211
- # テナントを切り替え
212
- barista context use-tenant <tenant-name>
213
-
214
- # デフォルトサービスを切り替え
215
- barista context use-service [liberica|arabica]
135
+ # スキルは ~/.barista/claude/skills/ に配置
136
+ barista skills install
216
137
  ```
217
138
 
218
- ### 認証管理
139
+ **利用可能なスキル:**
140
+ - `orders.md` — 注文管理ワークフロー
141
+ - `products.md` — 商品検索と同期
142
+ - `warehouses.md` — 在庫操作
143
+ - `subscriptions.md` — Arabicaサブスクリプション管理
219
144
 
220
- ```bash
221
- # ログインしてトークンを取得
222
- barista auth login --service <service> --env <env> [--tenant <tenant>]
145
+ ---
223
146
 
224
- # 例:Liberica 開発環境にログイン
225
- barista auth login --service liberica --env dev --tenant electionjp
147
+ ## 🚀 機能
226
148
 
227
- # ログイン状態を確認
228
- barista auth status
149
+ ### AIファースト設計
229
150
 
230
- # 出力例:
231
- # ✓ Liberica (dev) - ログイン済み (有効期限: 2024-12-31)
232
- # Liberica (test) - 未ログイン
233
- # Arabica (prod-cn) - ログイン済み (有効期限: 2024-12-30)
151
+ | 機能 | 説明 |
152
+ |-----|------|
153
+ | 🤖 **JSONファースト出力** | すべてのコマンドがAI解析用に`--json`をサポート |
154
+ | 📦 **構造化レスポンス** | 一貫した`{success, data, meta}`エンベロープ |
155
+ | 🔄 **冪等操作** | AIリトライループでも安全 |
156
+ | 🛡️ **デフォルトでドライラン** | 破壊的操作は実行前にプレビュー |
157
+ | 🔐 **セキュア保存** | 認証情報はenv変数ではなくシステムキーチェーンに保存 |
234
158
 
235
- # ログアウト(トークンをクリア)
236
- barista auth logout --service <service> --env <env>
159
+ ### 企業連携
237
160
 
238
- # すべての環境からログアウト
239
- barista auth logout --all
240
- ```
161
+ | サービス | 機能 |
162
+ |---------|------|
163
+ | ☕ **Liberica** | 注文、商品、在庫、倉庫、生産計画 |
164
+ | 🛒 **Arabica** | サブスクリプションプラン、請求、請求書、企業管理 |
165
+ | 🔗 **クロスサービス** | 注文から見積、システム間同期 |
241
166
 
242
- ### Liberica コマンド
167
+ ### 運用安全
243
168
 
244
- #### オーダー管理
169
+ - 📊 **監査証跡** — 操作ごとにリクエストIDでログ記録
170
+ - ⚠️ **確認保護** — `--dry-run` / `--force` で書き込み操作を保護
171
+ - 🏢 **マルチテナント隔離** — 認証情報はテナントごとに分離
245
172
 
246
- ```bash
247
- # オーダーを一覧表示(ページング)
248
- barista liberica orders list [--page <n>] [--size <n>] [--status <status>]
173
+ ---
249
174
 
250
- # 単一オーダーの詳細を取得
251
- barista liberica orders get <order-id>
175
+ ## 🔧 コマンドリファレンス
252
176
 
253
- # オーダーを作成
254
- barista liberica orders create \
255
- --product-id <id> \
256
- --quantity <n> \
257
- [--delivery-date <date>] \
258
- [--note <text>]
177
+ ### コアパターン
259
178
 
260
- # オーダーをキャンセル
261
- barista liberica orders cancel <order-id> [--reason <text>]
262
179
  ```
263
-
264
- #### 製品管理
265
-
266
- ```bash
267
- # 製品を検索
268
- barista liberica products search --keyword <keyword> [--category <id>]
269
-
270
- # 製品詳細を取得
271
- barista liberica products get <product-id>
272
-
273
- # 公開製品リストを取得(認証不要)
274
- barista liberica products public-list [--category <id>] [--page <n>]
180
+ barista <service> <resource> <action> [options]
275
181
  ```
276
182
 
277
- #### 生産計画
278
-
279
- ```bash
280
- # 生産スケジュールを表示
281
- barista liberica production schedule [--start-date <date>] [--end-date <date>]
282
-
283
- # 再スケジュール
284
- barista liberica production reschedule <order-id> --new-date <date> [--dry-run]
183
+ ### グローバルオプション
285
184
 
286
- # 生産能力を照会
287
- barista liberica production capacity [--date <date>] [--line <line-id>]
288
- ```
185
+ | オプション | 説明 | デフォルト |
186
+ |-----------|------|----------|
187
+ | `--env` | 環境 (dev\|test\|prod-cn\|prod-jp) | `dev` |
188
+ | `--tenant` | テナント名 | - |
189
+ | `--json` | JSON出力 | `false` |
190
+ | `--dry-run` | プレビューモード(AI推奨) | `false` |
191
+ | `--force` | 確認スキップ | `false` |
192
+ | `--page` | ページ番号 | `1` |
193
+ | `--size` | ページサイズ(最大件数) | `20` |
194
+
195
+ ### クイックリファレンス
196
+
197
+ | コマンド | 説明 |
198
+ |---------|------|
199
+ | `barista context show` | 現在のenv/テナントコンテキストを表示 |
200
+ | `barista context use-env <env>` | 環境を切り替え |
201
+ | `barista liberica orders list --json` | 注文一覧(AI形式) |
202
+ | `barista liberica orders get <id> --json` | 注文詳細取得 |
203
+ | `barista liberica orders create --dry-run ...` | 作成プレビュー |
204
+ | `barista liberica products search --keyword <kw> --json` | 商品検索 |
205
+ | `barista arabica plans list --json` | サブスクリプションプラン一覧 |
206
+ | `barista arabica invoices list --json` | 請求書一覧 |
207
+
208
+ **[→ 詳細コマンドリファレンス](./docs/commands/REFERENCE.md)**
289
209
 
290
- ### Arabica コマンド
210
+ ---
291
211
 
292
- #### 製品管理
212
+ ## 🛡️ AI安全ガイドライン
293
213
 
294
- ```bash
295
- # 製品を一覧表示
296
- barista arabica products list [--page <n>] [--size <n>] [--category <id>]
214
+ ### 1. 常にまずドライランを実行
297
215
 
298
- # 製品を検索
299
- barista arabica products search --keyword <keyword>
216
+ ```typescript
217
+ // 間違い 盲目的に実行
218
+ await $`barista liberica orders cancel 12345`
300
219
 
301
- # 製品カタログを取得(公開インターフェース)
302
- barista arabica products public-catalog [--lang <zh|jp|en>]
220
+ // ✅ 正しい — まずプレビュー
221
+ const preview = await $`barista liberica orders cancel 12345 --dry-run`
222
+ // プレビューを解析、検証してから:
223
+ await $`barista liberica orders cancel 12345 --force`
303
224
  ```
304
225
 
305
- #### 見積管理
226
+ ### 2. 続行前に成功を確認
306
227
 
307
- ```bash
308
- # 見積を計算
309
- barista arabica quotes calculate \
310
- --product-id <id> \
311
- --quantity <n> \
312
- [--options <json>]
313
-
314
- # 見積書を作成
315
- barista arabica quotes create \
316
- --customer-id <id> \
317
- --items <json> \
318
- [--valid-days <n>]
228
+ ```typescript
229
+ const result = JSON.parse(stdout)
230
+ if (!result.success) {
231
+ // エラーを処理、続行しない
232
+ throw new Error(result.error?.message || result.meta?.message)
233
+ }
319
234
  ```
320
235
 
321
- #### 顧客管理
236
+ ### 3. デバッグにリクエストIDを使用
322
237
 
323
- ```bash
324
- # 顧客を検索
325
- barista arabica customers search --keyword <keyword> [--type <type>]
326
-
327
- # 顧客詳細を取得
328
- barista arabica customers get <customer-id>
238
+ ```typescript
239
+ const { meta } = JSON.parse(stdout)
240
+ console.log(`Request ID: ${meta.requestId}`)
329
241
  ```
330
242
 
331
- ### クロスサービスコマンド
243
+ ### 4. レート制限を遵守
332
244
 
333
- クロスサービスコマンドは、Liberica と Arabica 間のデータ同期と業務プロセスの連携を実現します。
334
-
335
- ```bash
336
- # オーダーから見積書を生成
337
- barista cross quote-from-order <order-id> [--target-service arabica]
338
-
339
- # 出力例:
340
- # ✓ 見積書を生成しました
341
- # ┌──────────┬────────────┐
342
- # │ 属性 │ 値 │
343
- # ├──────────┼────────────┤
344
- # │ オーダーID│ 12345 │
345
- # │ 見積書ID │ QT-2024-001│
346
- # │ 金額 │ ¥50,000 │
347
- # │ 有効期限 │ 30日 │
348
- # └──────────┴────────────┘
349
-
350
- # オーダー状態を Arabica に同期
351
- barista cross sync-order <order-id> [--direction liberica-to-arabica]
352
- ```
245
+ - 一括操作間に遅延を追加
246
+ - 一括取得には`--size 100`を使用
247
+ - 適切な場面でレスポンスをキャッシュ
353
248
 
354
249
  ---
355
250
 
356
- ## 高度な機能
357
-
358
- ### Dry-Run モード
359
-
360
- Dry-Run モードを使用すると、書き込み操作を実行する前にその影響をプレビューでき、誤操作を防ぐことができます。
251
+ ## ⚙️ 設定
361
252
 
362
- ```bash
363
- # すべての書き込み操作は --dry-run オプションをサポート
364
- barista liberica orders create --product-id 123 --quantity 100 --dry-run
365
-
366
- # 出力例:
367
- # 🔍 Dry-Run モード:操作は実際に実行されません
368
- # ┌─────────────────┬──────────────────────┐
369
- # │ 操作 │ オーダー作成 │
370
- # ├─────────────────┼──────────────────────┤
371
- # │ 製品 │ コーヒー機 Pro (ID: 123) │
372
- # │ 数量 │ 100 │
373
- # │ 予定金額 │ ¥50,000 │
374
- # │ 予定納期 │ 2024-12-31 │
375
- # │ 影響 │ オーダーレコードを1件追加 │
376
- # └─────────────────┴──────────────────────┘
377
- #
378
- # ⚠️ 実行を確認?--confirm オプションを追加するか --dry-run を削除してください
379
- ```
380
-
381
- **デフォルトで Dry-Run の操作:**
382
-
383
- 以下の破壊的な操作はデフォルトで Dry-Run モードが有効で、明示的な確認が必要です:
384
-
385
- - オーダーキャンセル
386
- - 製品削除
387
- - バッチ更新
388
-
389
- ### JSON 出力形式
253
+ ### ファイル場所
390
254
 
391
- Barista CLI はスクリプト処理と AI 統合のために JSON 出力をサポートしています:
255
+ `~/.barista/config.yaml`
392
256
 
393
- ```bash
394
- barista liberica orders list --json
395
-
396
- # 出力例:
397
- {
398
- "success": true,
399
- "data": {
400
- "items": [
401
- {
402
- "id": "12345",
403
- "productName": "コーヒー機 Pro",
404
- "quantity": 100,
405
- "status": "in_production",
406
- "createdAt": "2024-01-15T10:30:00Z"
407
- }
408
- ],
409
- "pagination": {
410
- "page": 1,
411
- "size": 20,
412
- "total": 150
413
- }
414
- }
415
- }
416
- ```
417
-
418
- ---
419
-
420
- ## 設定説明
421
-
422
- ### 設定ファイル
423
-
424
- 設定ファイルは `~/.barista/config.yaml` にあります:
257
+ ### クイック設定
425
258
 
426
259
  ```yaml
427
- # Barista CLI 設定ファイル
428
-
429
- # デフォルトコンテキスト設定
430
260
  defaults:
431
- env: dev
432
- tenant: electionjp
261
+ env: prod-cn
262
+ tenant: your-tenant
433
263
  service: liberica
434
264
 
435
- # 環境設定
436
265
  environments:
437
- dev:
438
- liberica:
439
- baseUrl: "https://{tenant}-dev.newpeaksh.com"
440
- timeout: 30000
441
- arabica:
442
- baseUrl: "https://arabica-dev.newpeaksh.com"
443
- timeout: 30000
444
-
445
- test:
446
- liberica:
447
- baseUrl: "https://{tenant}-test.newpeaksh.com"
448
- timeout: 30000
449
- arabica:
450
- baseUrl: "https://arabica-test.newpeaksh.com"
451
- timeout: 30000
452
-
453
266
  prod-cn:
454
267
  liberica:
455
268
  baseUrl: "https://{tenant}.newpeaksh.com"
@@ -457,252 +270,71 @@ environments:
457
270
  arabica:
458
271
  baseUrl: "https://www.newpeaksh.com"
459
272
  timeout: 60000
460
-
461
- prod-jp:
462
- liberica:
463
- baseUrl: "https://{tenant}.newpeakjp.com"
464
- timeout: 60000
465
- arabica:
466
- baseUrl: "https://members.newpeakjp.com"
467
- timeout: 60000
468
-
469
- # 出力設定
470
- output:
471
- format: table # table | json
472
- color: true
473
- timestamp: true
474
273
  ```
475
274
 
476
- ### マルチテナント設定
477
-
478
- 複数のテナントを設定し、素早く切り替えることができます:
275
+ ### 認証
479
276
 
480
277
  ```bash
481
- # テナント設定を追加
482
- barista config add-tenant \
483
- --name customer-a \
484
- --liberica-id customer-a-id \
485
- --arabica-id customer-a-arabica-id
278
+ # 認証情報ログイン(推奨)
279
+ barista liberica auth login <env> <tenant> <username> <password>
486
280
 
487
- # 設定済みテナントを一覧表示
488
- barista config list-tenants
281
+ # 認証状態確認
282
+ barista auth status
489
283
 
490
- # テナントを素早く切り替え
491
- barista context use-tenant customer-a
284
+ # ログアウト
285
+ barista auth logout --service liberica --env prod-cn
492
286
  ```
493
287
 
494
288
  ---
495
289
 
496
- ## AI 統合
497
-
498
- Barista CLI は AI プログラミングアシスタント向けに最適化されており、特に Claude Code をサポートしています。
499
-
500
- ### Claude Code 使用例
501
-
502
- ```typescript
503
- // Claude Code で Barista CLI を使用
504
- // 例:オーダーリストを取得して分析
505
-
506
- const result = await $`barista liberica orders list --json --page 1 --size 10`;
507
- const orders = JSON.parse(result.stdout);
508
-
509
- // オーダーデータを分析
510
- const analysis = orders.data.items.map(order => ({
511
- id: order.id,
512
- status: order.status,
513
- amount: order.amount
514
- }));
515
- ```
516
-
517
- ### Skills ファイル
518
-
519
- Barista CLI は Claude Code Skills ファイルを提供しています。場所:
520
-
521
- ```
522
- ~/.barista/claude/skills/
523
- ├── orders.md # オーダー管理スキル
524
- ├── products.md # 製品管理スキル
525
- ├── quotes.md # 見積管理スキル
526
- └── customers.md # 顧客管理スキル
527
- ```
528
-
529
- **Skills ファイルの例:**
530
-
531
- ```markdown
532
- # オーダー管理スキル
533
-
534
- ## 保留中のオーダーを一覧表示
290
+ ## トラブルシューティング
535
291
 
536
- ユーザーが保留中のオーダーについて尋ねた場合:
537
-
538
- 1. コマンドを実行:barista liberica orders list --status pending --json
539
- 2. 返された JSON を解析
540
- 3. オーダー数と合計金額を要約
541
- 4. 上位5件のオーダーの重要情報を一覧表示
542
-
543
- ## 新規オーダーを作成
544
-
545
- ユーザーがオーダーの作成が必要な場合:
546
-
547
- 1. 製品 ID と数量を確認
548
- 2. dry-run でプレビュー:barista liberica orders create --dry-run ...
549
- 3. ユーザー確認後に実際のコマンドを実行
550
- ```
551
-
552
- ### AI フレンドリーな出力
553
-
554
- すべてのコマンドは `--json` オプションをサポートし、構造化された JSON データを返します:
292
+ ### 認証失敗
555
293
 
556
294
  ```bash
557
- # 構造化出力で照会
558
- barista liberica orders get 12345 --json
559
-
560
- {
561
- "success": true,
562
- "data": {
563
- "id": "12345",
564
- "status": "in_production",
565
- "product": {
566
- "id": "100",
567
- "name": "コーヒー機 Pro"
568
- },
569
- "quantity": 100,
570
- "amount": 50000,
571
- "timeline": {
572
- "created": "2024-01-15T10:30:00Z",
573
- "delivery": "2024-02-15"
574
- }
575
- },
576
- "meta": {
577
- "requestId": "req-abc123",
578
- "timestamp": "2024-01-15T10:30:00Z"
579
- }
580
- }
581
- ```
582
-
583
- ---
584
-
585
- ## 開発ガイド
295
+ # 現在の状態を確認
296
+ barista auth status
586
297
 
587
- ### プロジェクト構造
298
+ # 再認証
299
+ barista liberica auth login prod-cn your-tenant your-username your-password
588
300
 
589
- ```
590
- coffee-barista-cli/
591
- ├── bin/
592
- │ └── barista.js # エントリーファイル
593
- ├── src/
594
- │ ├── commands/ # コマンド実装
595
- │ │ ├── context/ # コンテキスト管理コマンド
596
- │ │ ├── auth/ # 認証コマンド
597
- │ │ ├── liberica/ # Liberica サービスコマンド
598
- │ │ │ ├── orders.js
599
- │ │ │ ├── products.js
600
- │ │ │ └── production.js
601
- │ │ ├── arabica/ # Arabica サービスコマンド
602
- │ │ │ ├── products.js
603
- │ │ │ ├── quotes.js
604
- │ │ │ └── customers.js
605
- │ │ └── cross/ # クロスサービスコマンド
606
- │ ├── core/ # コアモジュール
607
- │ │ ├── auth.js # 認証管理
608
- │ │ ├── config.js # 設定管理
609
- │ │ ├── context.js # コンテキスト管理
610
- │ │ └── api-client.js # API クライアント
611
- │ ├── utils/ # ユーティリティ関数
612
- │ │ ├── formatter.js # 出力フォーマット
613
- │ │ ├── validator.js # パラメータ検証
614
- │ │ └── keychain.js # キーチェーン操作
615
- │ └── templates/ # テンプレートファイル
616
- ├── skills/ # Claude Code Skills
617
- ├── tests/ # テストファイル
618
- ├── package.json
619
- └── README.md
301
+ # コンテキスト確認
302
+ barista context show
620
303
  ```
621
304
 
622
- ### ローカル開発
305
+ ### APIエラー
623
306
 
624
307
  ```bash
625
- # 1. リポジトリをクローン
626
- git clone https://gitlab.newpeaksh.com/coffee/coffee-barista-cli.git
627
- cd coffee-barista-cli
628
-
629
- # 2. 依存関係をインストール
630
- npm install
631
-
632
- # 3. グローバルにリンク(開発モード)
633
- npm link
634
-
635
- # 4. リンクを確認
636
- barista --version
637
-
638
- # 5. テストを実行
639
- npm test
308
+ # 常に--jsonでエラーコードを取得
309
+ barista liberica orders list --json
640
310
 
641
- # 6. コードチェック
642
- npm run lint
311
+ # エラーレスポンスにはデバッグ用のrequestIdが含まれる
312
+ # "requestId": "req-abc123"
643
313
  ```
644
314
 
645
- ### 新しいコマンドを追加
646
-
647
- **重要**:新しいコマンドは [コマンド設計仕様](./docs/COMMAND_DESIGN_SPEC.md) に従う必要があり、設計ドキュメントの作成、技術レビューなどの完全なプロセスが含まれます。
648
-
649
- 詳細な手順については以下を参照してください:
650
- - [完全なコマンドリファレンス](./docs/commands/REFERENCE.md) - すべてのコマンドリストと開発優先度
651
- - [コマンド設計仕様ドキュメント](./docs/COMMAND_DESIGN_SPEC.md#5-コマンド開発フロー)
652
- - [コマンド開発ガイド](./docs/COMMANDS.md)
653
-
654
- ---
655
-
656
- ## 貢献ガイド
657
-
658
- バグ報告、新機能の提案、ドキュメントの改善、コード修正、新機能の追加など、あらゆる形態の貢献を歓迎します。
659
-
660
- ### コミット規約
661
-
662
- [Conventional Commits](https://www.conventionalcommits.org/) 仕様に従ってください:
315
+ ### タイムアウト
663
316
 
664
317
  ```bash
665
- # バグ修正
666
- fix: オーダーリストのページング問題を修正
667
-
668
- # 機能追加
669
- feat: 在庫照会コマンドを追加
670
-
671
- # ドキュメント更新
672
- docs: README の環境マッピングを更新
318
+ # より近い環境に切り替え
319
+ barista context use-env dev
673
320
 
674
- # コードリファクタリング
675
- refactor: API クライアントのエラー処理をリファクタリング
321
+ # またはconfig.yamlでタイムアウトを調整
676
322
  ```
677
323
 
678
- ### 開発フロー
679
-
680
- 1. このリポジトリをフォーク
681
- 2. 機能ブランチを作成:`git checkout -b feature/my-feature`
682
- 3. 変更をコミット:`git commit -m 'feat: add some feature'`
683
- 4. ブランチをプッシュ:`git push origin feature/my-feature`
684
- 5. Pull Request を作成
685
-
686
324
  ---
687
325
 
688
- ## 関連プロジェクト
326
+ ## 📚 関連プロジェクト
689
327
 
690
- | プロジェクト | 説明 | リンク |
691
- |------------|------|--------|
692
- | ☕ Liberica Backend | 生産管理 SaaS バックエンド | [coffee-liberica-end](https://gitlab.newpeaksh.com/coffee/coffee-liberica-end) |
693
- | 🖥️ Liberica Frontend | 生産管理 Web フロントエンド | [coffee-liberica-front](https://gitlab.newpeaksh.com/coffee/coffee-liberica-front) |
694
- | 📱 Liberica Mobile | 生産管理モバイル | [coffee-liberica-mobile-front](https://gitlab.newpeaksh.com/coffee/coffee-liberica-mobile-front) |
695
- | 🛒 Arabica Backend | 販売プラットフォームバックエンド | [coffee-arabica-end](https://gitlab.newpeaksh.com/coffee/coffee-arabica-end) |
696
- | 🌐 Arabica Frontend | 販売プラットフォームフロントエンド | [coffee-arabica-front](https://gitlab.newpeaksh.com/coffee/coffee-arabica-front) |
328
+ | プロジェクト | 説明 |
329
+ |------------|------|
330
+ | ☕ Liberica Backend | 生産管理SaaSバックエンド |
331
+ | 🖥️ Liberica Frontend | 生産管理Web UI |
332
+ | 📱 Liberica Mobile | 生産管理モバイルアプリ |
333
+ | 🛒 Arabica Backend | オンラインサブスクリプションSaaSバックエンド |
334
+ | 🌐 Arabica Frontend | オンラインサブスクリプションWeb UI |
697
335
 
698
336
  ---
699
337
 
700
- ## ライセンス
338
+ ## 📄 ライセンス
701
339
 
702
340
  [MIT](LICENSE) © Newpeak Technology
703
-
704
- ---
705
-
706
- <p align="center">
707
- ☕ で生産性を向上
708
- </p>