-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfeed.xml
429 lines (313 loc) · 42.2 KB
/
feed.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>ペパボ研究所</title>
<id>http://rand.pepabo.com/article</id>
<link href="http://rand.pepabo.com/article"/>
<link href="http://rand.pepabo.com/feed.xml" rel="self"/>
<updated>2024-09-24T15:00:00+00:00</updated>
<author>
<name>GMO Pepabo, Inc.</name>
</author>
<entry>
<title>博士後期課程を修了し、博士(情報科学)の学位を授与されました</title>
<link rel="alternate" href="http://rand.pepabo.com/article/2024/09/25/miyakey-doctor/"/>
<id>http://rand.pepabo.com/article/2024/09/25/miyakey-doctor/</id>
<published>2024-09-24T15:00:00+00:00</published>
<updated>2025-02-10T02:08:21+00:00</updated>
<author>
<name>三宅悠介</name>
</author>
<content type="html"><p>ペパボ研究所 研究員/プリンシパルエンジニアの三宅(<a href="https://x.com/monochromegane">@monochromegane</a>)です。
2024年9月25日に九州大学大学院システム情報科学府博士後期課程を修了し、博士(情報科学)の学位を授与されましたので報告いたします。</p>
<h2 id="section">進学の経緯</h2>
<p>2017年に運用開発エンジニアから研究員となり、未経験なりに試行錯誤を重ねながらジャーナル論文の採択まで漕ぎつけたものの、一度、正しい研究の型を獲得しなければ、これ以上には結果の水準をあげることができないだろうとも痛感していました。
そこで、自身の研究の発展はもちろんのこと、研究を推し進めていく力を高めたいと考え、社会人として博士後期課程へ挑戦しました。
修士を飛ばしての出願となったのですが、幸いにも前述のジャーナル論文や10本弱の研究報告などの実績をもって修士相当の学力を持つという出願資格が認められ、入学試験試問を経て、2020年10月に入学することができました。</p>
<p>この辺りについては、以下のブログ記事に書いてあるので、もしご興味があればお読みください。</p>
<p><a href="https://blog.monochromegane.com/blog/2020/09/21/isee-kyushu-u/">九州大学大学院システム情報科学府博士後期課程に入学します</a></p>
<h2 id="section-1">博士後期課程を通して</h2>
<p>進学後は、国際会議での採択を目標に走り続けました。
在学中にジャーナル論文1本が採録され、国際会議に2本採択されました。
最終的に、入学前のジャーナル論文と合わせて計4本の実績をもとに、学位申請のための博士論文を執筆しました。</p>
<p>4年間の在学中は、上記の論文以外にも、不採択となった国際会議論文が7本と、国内の研究会やシンポジウムでの研究報告が5本あり、研究・評価・論文というサイクルを常時繰り返していました。
これらの継続的なサイクルを通して、「研究という最短ルートはない道程において、同じ道を回ることなく、常に何かしらの前進という成果を得る」ための様々な方法論や姿勢を体得し、研究を推し進めるための力を高めることができたと思います(例えば<a href="https://blog.monochromegane.com/blog/2020/09/23/structure-of-research-paper/">論文ストラクチャー</a>や<a href="https://blog.monochromegane.com/blog/2021/05/15/survey-method/">集中型のサーベイ方法</a>、<a href="https://blog.monochromegane.com/blog/2023/12/30/international-conference-struggles/">前進する力</a>など)。</p>
<p>また、総集編となる博士論文執筆においては、これらの実績を自身の研究の世界観のもとに再構成しなければなりませんでした。
非常に難易度の高い執筆でしたが、この執筆を通して、ボトムアップな進め方であった自身の研究テーマに対し、トップダウンからの位置付けを与えることができました。
今後、新たな研究テーマを進めるにあたっても、これまでより遠い場所にも予めマイルストーンをおいて大局的な観点に基づいて進められるのではないかと考えています。</p>
<p>博論については、大学のリポジトリでの公開後に<a href="/archive">ペパ研の実績一覧</a>に掲載します。
博論の説明会である公聴会に用いた資料は以下に公開していますので、こちらも興味があればご覧ください。</p>
<h3 id="section-2">学位論公聴会の資料</h3>
<iframe class="speakerdeck-iframe" frameborder="0" src="https://speakerdeck.com/player/fa86535877924ec8bbb68c58c25e3338" title="多様かつ継続的に変化する環境に適応する情報システム/thesis-defense-presentation" allowfullscreen="true" style="border: 0px; background: padding-box padding-box rgba(0, 0, 0, 0.1); margin: 0px; padding: 0px; border-radius: 6px; box-shadow: rgba(0, 0, 0, 0.2) 0px 5px 40px; width: 100%; height: auto; aspect-ratio: 560 / 315;" data-ratio="1.7777777777777777"></iframe>
<h2 id="section-3">今後について</h2>
<p>この4年間を通して、研究とは「人類が新たに学べる領域を作り出すこと」であり、博士課程とは「その方法論を、特定の研究テーマに基づく実践を通して身につける課程」なのだろうと考えるようになりました。</p>
<p>つまり、博士号を取得したということは、不確実で混沌とした課題領域においても、比較・体系化・言語化を通して、誰もがその課題を共有し、時間をかけることなく効果のある対策を講じられる基盤を整えられるスキルを持つ、すなわち、学べる領域を作り出せる人材であることが期待されるようになったのだと思います。</p>
<p>今後は、自身の研究テーマの推進はもちろんのこと、さまざまな施策において、所属する研究所のミッションである「研究開発により『事業を差別化できる技術』を生み出す」ことができるよう、さらに精進していきます。</p>
<p>最後になりましたが、今回の博士号の取得は、支えてくださった皆さんのおかげで実現した成果です。
指導くださった先生方、ペパボ研究所の皆さんをはじめとする同僚、切磋琢磨した社会人学生の皆さん、そして家族へ、心から感謝します。</p>
</content>
</entry>
<entry>
<title>IEEE COMPSAC 2024で重み付き逐次ガウス過程回帰モデルを用いた多腕バンディット方策について発表しました</title>
<link rel="alternate" href="http://rand.pepabo.com/article/2024/07/05/compsac2024/"/>
<id>http://rand.pepabo.com/article/2024/07/05/compsac2024/</id>
<published>2024-07-04T15:00:00+00:00</published>
<updated>2025-02-10T02:08:21+00:00</updated>
<author>
<name>三宅悠介</name>
</author>
<content type="html"><p>ペパボ研究所 研究員/プリンシパルエンジニアの三宅(<a href="https://twitter.com/monochromegane">@monochromegane</a>)です。
2024年7月2日から4日に渡って大阪で開催された<a href="https://ieeecompsac.computer.org/2024/">IEEE COMPSAC 2024</a>において、<strong>Online Nonstationary and Nonlinear Bandits with Recursive Weighted Gaussian Process</strong>という標題で、フルペーパー採択論文の発表を行ってきました。発表資料と共に内容を紹介します。</p>
<h2 id="ieee-compsac-2024">IEEE COMPSAC 2024</h2>
<p><img src="/images/2024-07-05-compsac2024/compsac2024.jpg" alt="compsac2024" /></p>
<p>IEEE COMPSACは、IEEE内のテクニカルソサイエティIEEE Computer Societyによる、コンピュータソフトウェア分野の主要な国際会議です。
13ものシンポジウムに渡るコンピューティング技術の各分野に関する幅広い議論が、実応用まで踏まえてなされるのが特徴で、「研究開発により事業を差別化できる技術を生み出す」というペパボ研究所のビジョンに通じる部分が多い国際会議です。</p>
<p>なお、今年のCOMPSAC 2024は、約300本の投稿がありフルペーパーの採択率は24%だったとのことです。</p>
<h2 id="section">発表概要</h2>
<p>ECサイトをはじめとするWebサービスでは、利用者にとって快適な体験を提供することが重要です。
このために、サービス運用者は施策の試行錯誤を重ねています。
一方で、これらの施策の有用性は、利用者や実環境に応じた様々な要因によって異なるため、実環境での評価が欠かせません。
ただし、判断の遅延や誤った判断によって生じる機会損失は避けねばなりません。
この機会損失の低減は多腕バンディット問題とみなすことができ、この問題に対する多くの方策が研究・提案されてきました。</p>
<p>本研究では、Webサービスにおける施策の比較評価に適した多腕バンディットの方策を提案しました。
提案では、この比較評価に必要な要件を整理し、時間変化、文脈の考慮、応答速度という要件を満たすような方策を検討しています。
特に、従来の方策では難しかった、利用者の文脈と施策の有用性の間にある複雑な関係の理解に挑戦しました。
具体的には、非線形回帰モデルであるガウス過程回帰モデルをベースとした重み付き逐次ガウス過程回帰モデルを提案し、施策の有用性に対する時間変化と、文脈との間にある複雑な関係性を捉え、再帰的学習の適用によって応答速度の要件を満たします。
また、これらの組み合わせにより生じてしまうガウス過程回帰の予測分布の推定誤差を任意のタイミングで正確に補正することで、予測分布の推定精度と計算時間のトレードオフを解決しています。
詳細は以下の発表資料もしくは公開後の論文をご覧ください。</p>
<p>評価では、非定常・非線形な多腕バンディット問題のシミュレーションを通して、機会損失の低減性能と実行時間を評価しました。
シミュレーションでは、同分野の最先端方策に対し、提案した方策が機会損失の低減性能を維持しながら、大幅な計算時間の削減が可能という結果を得ることができました。</p>
<p>今後は、適応的なパラメータ調整の検討を進めつつ、実システムへの積極的な展開を進めていきます。</p>
<p><img src="/images/2024-07-05-compsac2024/compsac2024_talk.jpg" alt="compsac2024-talk" /></p>
<h2 id="section-1">発表資料</h2>
<script defer="" class="speakerdeck-embed" data-id="6846775a026a407f8cb93ec815d373b4" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>
<h2 id="section-2">発表を終えて</h2>
<p>今回は、アカデミックな国際会議として2度目の発表だったこともあり、前回よりも発表や質疑応答を余裕を持ってこなすことができたように感じます。
そのため、自身の研究内容に関連する発表内容はもちろんのこと、幅広い分野での取り組みや、発表における表現方法など様々なことを吸収できました。
今後は専門分野での能力だけでなく英語力も一層向上させ、活発かつ深い議論の輪にもっと入っていけるようにしたいと思います。</p>
</content>
</entry>
<entry>
<title>AIを前提とした体験の実現に向けての勉強会を開催しました</title>
<link rel="alternate" href="http://rand.pepabo.com/article/2024/03/28/ai/"/>
<id>http://rand.pepabo.com/article/2024/03/28/ai/</id>
<published>2024-03-27T15:00:00+00:00</published>
<updated>2025-02-10T02:08:21+00:00</updated>
<author>
<name>三宅悠介, 渡辺龍二, 酒井敏彦</name>
</author>
<content type="html"><p>ペパボ研究所 研究員/プリンシパルエンジニアの三宅(<a href="https://twitter.com/monochromegane">@monochromegane</a>)です。
2024年3月27日に、AIを前提とした体験の実現に向けての社内勉強会を開催しました。
発表資料と共に内容を紹介します。</p>
<h2 id="section">背景</h2>
<p>ペパボではAIを前提とした新しい体験の実現に向けて、全社的な取り組みが加速しています<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>。
この動きに伴い、ペパボ研究所はAIを前提とした体験、すなわちAI体験について、職種を超えた共通理解を醸成することの重要性を認識しています。
そのため、社内外の実践例や最新の動向を調査し、整理分類を通して、「AI体験」の理解を深めるための資料を作成しました。
さらに、この資料を活用して社内勉強会を開催しました。</p>
<p>なお、本資料では、任意のタスクを解くための振る舞いをデータから記述するような、機械学習ベースの方式全般をAIと定義しています。</p>
<h2 id="section-1">発表概要</h2>
<p>資料ではまず、2つの主要な概念である「AI Transformation」と「AI eXperience」を整理しています。
AI体験を提供するためには、AI活用による組織やシステムの変革を伴うAI Transformationが不可欠であることを述べています。
次に、AI体験の分類と実践例について紹介しています。
ここでは、ペパボのEC事業の主たる形態であるTwo-sided marketを例に、「商品を通したAI体験」と「システムを通したAI体験」に分類しています。
特に、DXにおけるデジタイゼーションとデジタルトランスフォーメーションの違いを示しながら、AIによる組織(運用)やシステムの変容を伴うインパクトの大きな体験の重要性を確認します。
さらに、システムを通したAI体験において着目すべき点の感覚を養うため、システムのあり方の変化と具体的な実践例を示しています。
最後に、AI体験の実現に向けて、その効果とAIプロジェクト推進における注意事項をまとめています。</p>
<h2 id="section-2">発表資料</h2>
<script defer="" class="speakerdeck-embed" data-id="cc819e57deca4886a3b118087d93ff23" data-ratio="1.7772511848341233" src="//speakerdeck.com/assets/embed.js"></script>
<h2 id="section-3">勉強会を終えて</h2>
<p>勉強会には多くの方が参加してくれました。
参加者の皆さんからの積極的な質問や意見交換があり、非常に有意義な時間となりました。
質疑応答の時間では、AIだけでなく導入に向けた評価指標の設計についても熱心に議論されました。
本勉強会が、AI体験の実現に向けた共通認識の醸成と、取り組みの加速に寄与すれば嬉しいです。</p>
<hr />
<p>ペパボ研究所では、AI体験の実現に向けて「<a href="https://rand.pepabo.com/">なめらかなシステム</a>」というビジョンで研究開発に取り組んでいます。
以下の資料に興味を持たれた方は、ぜひ声をかけてください。</p>
<ul>
<li><a href="https://speakerdeck.com/monochromegane/the-turn-to-recursive-system">再帰化への認知的転回</a></li>
<li><a href="https://speakerdeck.com/monochromegane/dicomo2021-coherently-fittable-system">なめらかなシステムと運用維持の未来</a></li>
</ul>
<hr />
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p><a href="https://pdf.pepabo.com/presentation/20240213p.pdf#_ga=2.175524006.520693016.1711528469-1998267041.1707217613">GMOペパボ 2023年12月期 通期 決算説明会資料</a> p.35,36 <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
</li>
</ol>
</div>
</content>
</entry>
<entry>
<title>IEEE WFIoT 2023でWebAssemblyを用いた動的に更新可能なIoTアプリケーションとisomorphicなIoTシステムについて発表しました</title>
<link rel="alternate" href="http://rand.pepabo.com/article/2023/10/25/wfiot2023/"/>
<id>http://rand.pepabo.com/article/2023/10/25/wfiot2023/</id>
<published>2023-10-24T15:00:00+00:00</published>
<updated>2025-02-10T02:08:21+00:00</updated>
<author>
<name>栗林健太郎</name>
</author>
<content type="html"><p>ペパボ研究所所長の栗林(あんちぽ)です。</p>
<p>2023年10月12日からポルトガルとのハイブリッドで開催された<a href="https://wfiot2023.iot.ieee.org/">IEEE WFIoT 2023</a>において、<strong>Dynamic IoT Applications and Isomorphic IoT Systems Using WebAssembly</strong>という標題で発表を行ってきました。</p>
<p>発表資料と共に内容を紹介します。</p>
<h2 id="ieee-wfiot-2023">IEEE WFIoT 2023</h2>
<p>IEEE WFIoTは、IEEEにおけるIoT領域の複数ソサエティが主導するIEEE IoT Technical Communityの国際会議です。</p>
<h2 id="section">発表概要</h2>
<p>IoTデバイスの適用領域が拡大していく中で、開発者は多様で急速に変わるユーザー要件に迅速に応じる必要が出てきています。そのため、IoTデバイスを迅速かつ頻繁に更新できる方法が要求されています。また、近年のクラウド/エッジコンピューティングの進展を考慮すると、複数の階層を通じて構成されるIoTシステムに適した形での、新しいアプローチが必要とされていると考えます。</p>
<p>本研究では、WebAssembly(Wasm)を活用して、動的に更新が可能なIoTデバイスの構築方法を提案します。提案方式では、IoTデバイス内のアプリケーションを実装するのに、メインのアプリケーションを実装するプログラム言語に加えてWasmランタイムを組み合わせて構成します。この組み合わせにより、デバイスの更新やメンテナンスが容易になることが期待されます。</p>
<p>さらに、本研究では、各システムの各レイヤーで共通のコードベースから構築される同一のWasmバイナリを使用したisomorphic(同型的)なIoTシステムの提案も行っています。IoTデバイスのみならずIoTシステムの全レイヤーを通じて、同一の技術ベースで開発できる手法です。具体例として、画像認識と分類のための機械学習モデルをWasmバイナリに変換する使用例を示しました。</p>
<p>提案手法の効果を検証するため、定量的な評価を実施しました。この評価から、提案手法がアプリケーションからWasm関数を呼び出す際のオーバーヘッドを導入するものの、その影響は限られていることが確認しました。さらに、広く使用される画像認識と分類のモデル、ResNet-50とMobileNetV2を用いて、提案手法の実際の性能を測定しました。これにより、提案手法が現行の環境で十分実用的であり、また将来の発展にも適していることを確認しました。</p>
<p><img src="/images/2023-10-25-wfiot2023/wfiot2023.jpg" alt="wfiot2023" /></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/IGAfZATbgnQ?si=fwf6LE5Y_OkDv-R0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>
<h2 id="section-1">発表資料</h2>
<script defer="" class="speakerdeck-embed" data-id="5f0e309fd8a5482ca0ef9ce6a412b783" data-ratio="1.7772511848341233" src="//speakerdeck.com/assets/embed.js"></script>
<h2 id="section-2">発表を終えて</h2>
<p>ポルトガルに行ってみたい気持ちはあったのですが、色々と都合がつかずリモートでのオンライン発表をしてきました。アカデミックな国際会議での発表は初めてでしたが、オーガナイザーやモデレータによるホスピタリティあふれる運営によって、特に問題なく終えることができました。共著者の皆様、カンファレンスの運営をしてくださっている皆様、本当にありがとうございました。</p>
</content>
</entry>
<entry>
<title>IEEE SMC 2023でメタ推薦システムに適した、状態空間モデルを用いた多腕バンディット方策について発表しました</title>
<link rel="alternate" href="http://rand.pepabo.com/article/2023/10/10/smc2023/"/>
<id>http://rand.pepabo.com/article/2023/10/10/smc2023/</id>
<published>2023-10-09T15:00:00+00:00</published>
<updated>2025-02-10T02:08:21+00:00</updated>
<author>
<name>三宅悠介</name>
</author>
<content type="html"><p>ペパボ研究所 研究員/プリンシパルエンジニアの三宅(<a href="https://twitter.com/monochromegane">@monochromegane</a>)です。
2023年10月1日から4日に渡ってハワイで開催された<a href="https://ieeesmc2023.org/">IEEE SMC 2023</a>において、<strong>Contextual and Nonstationary Multi-armed Bandits Using the Linear Gaussian State Space Model for the Meta-Recommender System</strong>という標題で発表を行ってきました。発表資料と共に内容を紹介します。</p>
<h2 id="ieee-smc-2023">IEEE SMC 2023</h2>
<p><img src="/images/2023-10-10-smc2023/smc2023.jpg" alt="smc2023" /></p>
<p>IEEE SMCは、IEEEのSystems, Man, and Cyberneticsソサイエティにおけるフラッグシップ国際会議です。
自律適応システムや人間と機械のインタラクション、知能システムのような幅広い分野の研究を扱うのが特徴で、ペパボ研究所におけるコンセプトである、情報システムとこれに関わる人々の間とでのコンテキストの創出・認識を通した相互継続的な自動適応を目指す機構、すなわち「なめらかなシステム」の研究分野に合致する部分が多い国際会議です。</p>
<p>なお、今年のSMC 2023は、1,400以上の投稿があり採択率は56%だったとのことです。</p>
<h2 id="section">発表概要</h2>
<p>ECサイトにおいて利用者の情報過多問題を解決するため、数多ある推薦手法の中から、適用先に適したものを選定することは重要です。
一方で、それらの推薦手法の有用性は実環境に応じた様々な要因によって異なるため、実環境での評価が欠かせません。
ただし、判断の遅延や誤った判断によって生じる機会損失は避けねばなりません。
このような推薦手法の選定の仕組みにおいて、機会損失を考慮した実環境での評価を多腕バンディット問題として扱う、メタ推薦システムが研究されています。</p>
<p>本研究では、このメタ推薦システムに適した多腕バンディットの方策を提案しました。
提案では、候補となる推薦手法自体の特性を整理し、時間変化、文脈の考慮、応答速度という要件を満たすような方策を検討しています。
具体的には、推薦手法の有用性の変化を状態空間モデルで表現することで時間変化と文脈を考慮し、軽量な線形カルマンフィルタを用いて状態を推定することで応答速度の要件を満たします。
詳細は以下の発表資料もしくは公開後の論文をご覧ください。</p>
<p>評価では、実際のECサイトから取得した複数の推薦手法に関する時間経過、文脈ごとに異なる有用性のデータを用いて提案手法を適用した際のクリック数をシミュレーションしました。
シミュレーションでは、本設定においては、ベースラインの他の方策に対し、機会損失を減らしながら適した推薦手法を自動的継続的に選定することが可能という結果を得ることができました。</p>
<p>今後は非線形な報酬モデルへの拡張を目指しつつ、実システムへの積極的な展開を進めていきます。</p>
<p><img src="/images/2023-10-10-smc2023/smc2023_talk.jpg" alt="smc2023-talk" /></p>
<h2 id="section-1">発表資料</h2>
<script defer="" class="speakerdeck-embed" data-id="53686322dcea424d83e96fb36d9945a5" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>
<h2 id="section-2">発表を終えて</h2>
<p>今回のSMC 2023は(プログラミング言語系を除いて)初の国際会議での発表となりました。
博士課程に入ってから8度目の投稿にしてようやく採択された論文であったため、発表は非常に感慨深いものでした。</p>
<p>実際の発表では以下の学びがあったと考えています。</p>
<h3 id="section-3">提案を端的に伝える</h3>
<p>発表資料の通り、今回の自身の発表では、提案の具体的な内容まできちんと説明を試みています。
一方で、他の方の発表では、いわゆるイントロダクション相当の内容での発表が多かったように思えます。
国内の研究会との違いから最初は違和感がありましたが、広い分野に対する発表をたくさん聞く中では、細かい部分よりも端的にまとめられた大枠の説明で興味に合うかを判断し、詳細は論文を読んだり質問するというのが良さそうだと感じました。
提案の手法を含むストーリー全体が共有できていない中での詳細説明は、興味関心を持ってもらう機会を逃すのかもしれません。
興味関心を持ってもらえなければ、その後の議論の機会が失われてしまうので大変勿体無いことです。</p>
<p>実際に自身の発表に対する質疑は残念ながらゼロであり、ここは次回改善していければと思います。
また、これは論文自体の執筆方針にも関わることだと思うので、今後の執筆でも伝わりやすさの観点を改めて大事にしていきたいと思えました。</p>
<h3 id="section-4">とにかく質問する</h3>
<p>国際会議やセッションの興味関心が非常に近しいこともあり、とても面白い発表がいくつもありました。
英語力としてはまだまだ不足していますが、とにかく質問はできるだけしました。
拙い英語であっても分野が同じであれば雰囲気は伝わるもので、たくさんの返答をいただけ、理解も深まりました。
この辺りは物怖じしてもしょうがないのでどんどんやって正解だったなと思います。
帰りの空港のセキュリティチェックポイントの列で質問した方とすれ違って雑談できたのもいい思い出になりました。</p>
<h3 id="section-5">一度参加しておく</h3>
<p>今回、初めての国際会議への参加となりましたが、雰囲気や求められているものはやはり参加しなければわからないなあと思えました。
参加することで、採択論文やその発表の水準を体感したり研究のモチベーションにも繋がるので、国内で開催される国際会議にでも先に一度参加しておけばよかったかなあと今になれば思えます。</p>
<p>以上、専門分野に関するもの以外にも多くの学びを得た国際会議での発表となりました。
今後は専門分野での能力だけでなく英語力も一層向上させ、活発かつ深い議論の輪にもっと入っていけるようにしたいと思います。</p>
</content>
</entry>
<entry>
<title>スプレッドシートでCloud Runを活用:Apps ScriptからCloud Runへの認証方法</title>
<link rel="alternate" href="http://rand.pepabo.com/article/2023/09/20/appsscript-cloudrun-certification/"/>
<id>http://rand.pepabo.com/article/2023/09/20/appsscript-cloudrun-certification/</id>
<published>2023-09-19T15:00:00+00:00</published>
<updated>2025-02-10T02:08:21+00:00</updated>
<author>
<name>酒井敏彦</name>
</author>
<content type="html"><p>ペパボ研究所 研究員の酒井(<a href="https://twitter.com/tshk_sakai">@tshk_sakai</a>)です。
今回は、Google Sheets(以下、スプレッドシートと書きます)でCloud Runを活用するため、<a href="https://openid.net/developers/how-connect-works/">OpenID Connect</a>仕様のIDトークンを用いて、Google Apps Script(以下、Apps Scriptと書きます)からCloud Runへの認証を行う方法についてご紹介します。</p>
<h2 id="section">背景</h2>
<p>業務において、スプレッドシートの情報を元に、処理を行い、その処理結果をシートへ反映したいことがあります。
この場合、スプレッドシート内で処理が完結することが望ましいですが、スプレッドシート単体では実現が難しいこともあります。
そこで、スプレッドシート内の情報を入力として、外部で処理を実施し、その結果をシートへ出力する方法を検討しました。</p>
<h2 id="section-1">構成</h2>
<p>スプレッドシート内の情報を入力として、外部で処理を行うには、外部にAPIサーバを構築する方法があります。
その場合、実装を可能な限り最小限とし、コストをかけずに構築することが望ましいです。
そこで、今回はCloud RunにAPIサーバを立て、Apps ScriptでCloud Runへアクセスするアーキテクチャを構築することにしました。</p>
<p>構成は以下の通りです。</p>
<p><img src="/images/2023-09-20-appsscript-cloudrun/architecture.png" alt="構成" /></p>
<p>Apps Scriptのコードからスプレッドシートの情報を取得した上で、Cloud Runへ認証及びhttpsアクセスを行い、処理結果をスプレッドシートへ追記します。
本記事では、Apps ScriptからCloud Runへの認証方法について説明します。</p>
<h2 id="apps-scriptcloud-run">Apps ScriptからCloud Runへの認証</h2>
<p>Apps ScriptからCloud Runへの認証を行うには、以下が必要となります。</p>
<ul>
<li>(Apps Script): OpenID Connectの仕様に準拠したIDトークンの取得</li>
<li>(Apps Script): OAuthスコープの設定</li>
<li>(Google Cloud): OAuth同意画面の設定</li>
<li>(Apps Script): Cloudプロジェクトの変更</li>
<li>(Cloud Run): OAuthクライアント情報の反映</li>
</ul>
<p>ここからは具体的な手順について説明します。</p>
<h3 id="openid-connectid">OpenID Connectの仕様に準拠したIDトークンの取得</h3>
<p>Cloud Runでは、IAMのCloud Run起動元ロールとして<code>allUsers</code>を付与すると、認証を行わずにアクセス可能です。
しかし、今回は、Cloud Runへのアクセスを特定のアカウントに限定したかったため、アクセスを行うアカウントに<code>roles/run.invoker</code>ロールを付与しました。</p>
<p>Cloud Runでは、Googleによって署名された<a href="https://cloud.google.com/docs/authentication/token-types?hl=ja#id">IDトークン</a>を<code>Authorization: Bearer </code>ヘッダーの後に付与することで、<a href="https://cloud.google.com/run/docs/authenticating/service-to-service?hl=ja#acquire-token">認証</a>を行います。IDトークンは、OpenID Connectの仕様に準拠したJWT(JSON Web Token)です。
例えば、Cloud StorageのJSON APIに対するリクエストは、<a href="https://cloud.google.com/storage/docs/authentication?hl=ja#apiauth">OAuth2.0アクセストークンで認証が可能</a>ですが、Cloud RunはOAuth2.0アクセストークンではなくIDトークンを利用します。
Apps Scriptでは、<a href="https://developers.google.com/apps-script/reference/script/script-app?hl=ja#getIdentityToken()">ScriptApp.getIdentityToken()</a>でOpenID Connectに準拠したIDトークンを取得することができます。しかし、そのまま<code>ScriptApp.getIdentityToken()</code>を用いるだけでは、まだCloud Runへの認証は通りません。</p>
<h3 id="oauth">OAuthスコープの設定</h3>
<p>Apps Scriptの実行に必要な権限をOAuthスコープとして定義します。
Apps Scriptの設定画面からappsscript.jsonを編集可能にする<a href="appsscript.jsonを編集可能にする設定">設定</a>及びappsscript.jsonの編集を行います。
具体的には、appsscript.jsonの<code>oauthScopes</code>は以下のように設定します。</p>
<div class="highlight"><pre class="highlight plaintext"><code>
"oauthScopes": [
"openid",
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/spreadsheets"
]
</code></pre></div>
<p>それぞれのスコープの設定理由について、以下で説明します。</p>
<ul>
<li><code>openid</code>: <a href="https://developers.google.com/apps-script/reference/script/script-app?hl=ja#getidentitytoken">getIdentityToken()でOpenID Connectに準拠したIDトークンを取得するため</a></li>
<li><code>https://www.googleapis.com/auth/userinfo.email</code>: <a href="https://developers.google.com/apps-script/reference/script/script-app?hl=ja#getidentitytoken">getIdentityToken()でユーザ情報をトークンに含めるため</a></li>
<li><code>https://www.googleapis.com/auth/script.external_request</code>: <a href="https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app?hl=ja#fetchurl,-params">UrlFetchApp.fetchを実行するため</a></li>
<li><code>https://www.googleapis.com/auth/spreadsheets</code>: <a href="https://developers.google.com/identity/protocols/oauth2/scopes?hl=ja#script">Googleスプレッドシートの参照、編集、作成、削除を行うため</a></li>
</ul>
<h3 id="oauth-1">OAuth同意画面の設定</h3>
<p>Apps ScriptのCloudプロジェクトを変更するためには、CloudプロジェクトでOAuth同意画面の設定を終わらせておく必要があります。
OAuth同意画面では、ユーザへ表示する情報を設定することができます。今回であれば、Apps Scriptを実行するユーザへ表示する情報を設定します。表示する情報を<a href="https://developers.google.com/apps-script/guides/cloud-platform-projects?hl=ja#complete_the_oauth_consent_screen">手順</a>に従って、作成しておきます。このOAuth同意画面の設定を終えていないと、Apps ScriptのCloudプロジェクト変更時にOAuth同意画面を設定しなければならない旨のエラー(<code>In order to change your project, you will need to configure the OAuth consent screen. Configure your OAuth Consent details.</code>)が表示されます。</p>
<h3 id="apps-scriptcloud">Apps ScriptのCloudプロジェクト変更</h3>
<p>Apps Scriptプロジェクトを作成すると<a href="https://developers.google.com/apps-script/guides/cloud-platform-projects?hl=ja#default">デフォルトのCloudプロジェクト</a>が作成されます。しかし、今回は既存にあるCloudプロジェクトに作成したCloud RunとApps Scriptを紐づけたいため、デフォルトのCloudプロジェクトではなく既存のCloudプロジェクト(標準のCloudプロジェクト)への変更が必要となります。まだCloudプロジェクトを作成していない場合は、新規作成し、<a href="https://developers.google.com/apps-script/guides/cloud-platform-projects?hl=ja#activate_an_api_in_a_standard">APIの有効化</a>を行います。既存のCloudプロジェクトへの変更自体はApps Scriptの設定画面で行います。
Apps Scriptの設定画面の「Google Cloud Platform(GCP) Project」で行うことができます。</p>
<p><img src="/images/2023-09-20-appsscript-cloudrun/google-cloud-platform-project.png" alt="Cloudプロジェクト変更画面" /></p>
<p>この画面で変更させたいCloudプロジェクトの番号を入力してください。入力後に(<code>Project does not exist or you need edit access to it.</code>)のエラーが出る場合は、Cloudプロジェクト自体が存在しないか、連携可能な権限がアカウントに付与されていません。権限の問題であれば、<code>roles/editor</code>ロールを持つアカウントであれば、変更可能です。</p>
<p>Apps ScriptのCloudプロジェクトをデフォルトから変更することで、Cloudプロジェクトの、APIとサービス&gt;認証情報のOAuth2.0クライアントIDの項目に新しくOAuth認証情報が作成されます。
Cloudプロジェクトの変更前後で<code>ScriptApp.getIdentityToken()</code>のbodyの値をデコード<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>した値を見ると、<code>audクレーム</code>の値が変化します。Cloudプロジェクト変更後は、<code>audクレーム</code>の値が新しく作成されたOAuth2.0クライアントIDの値と一致します。</p>
<h3 id="cloud-runoauth">Cloud RunへのOAuthクライアント情報の反映</h3>
<p>ここまでで<code>ScriptApp.getIdentityToken()</code>で有効なOpenID Connectに準拠したIDトークンが取得できるようになりました。しかし、まだApps ScriptからCloud Runへの認証は通りません。最後に新規作成したOAuth2.0クライアントIDの情報をCloud Runに反映する必要があります。(この後にCloud Runを新規に作成する場合は本手順は不要です)</p>
<p>反映するためにはCloud Runのリビジョン更新やインスタンスの新規作成を行う必要があります。以下のいずれかの方法で反映されることを確認済みです。</p>
<ul>
<li>Terraformでの削除(<code>terraform destroy</code>)、作成(<code>terraform apply</code>)※ TerraformでCloud Runを構築している場合</li>
<li>設定変更(<code>gcloud run services update</code>)</li>
<li>インスタンスの削除(<code>gcloud run services delete</code>)、作成(<code>gcloud run deploy</code>、<code>gcloud run services add-iam-policy-binding</code>)</li>
</ul>
<p>以上を行うことで、Apps ScriptからCloud Runへの認証を通すことができます。</p>
<h2 id="section-2">まとめ</h2>
<p>本記事では、スプレッドシートでCloud Runを活用するため、OpenID Connect仕様のIDトークンを用いたApps ScriptからCloud Runへの認証方法についてご紹介しました。</p>
<p>Apps Scriptで、OpenID Connect仕様のIDトークンを取得するためには、OAuthスコープの設定やCloudプロジェクトの変更が必要となります。
Cloudプロジェクトの変更には、Google Cloudで、OAuth同意画面の設定が必要となります。
上記設定後、Cloud RunへOAuthクライアント情報の反映を行うことで、Apps ScriptからCloud Runへの認証が通るようになります。</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p>デコードするためのコードは、<a href="https://developers.google.com/apps-script/reference/script/script-app?hl=ja#getidentitytoken">getIdentityToken()</a>のドキュメントに記載されています。 <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
</li>
</ol>
</div>
</content>
</entry>
</feed>