rabbit-slide-kou-redmine-osaka-17 2017.8.26.0

Sign up to get free protection for your applications and to get access to all the features.
Binary file
Binary file
@@ -0,0 +1,458 @@
1
+ = 全文検索で\nRedmineを\nさらに活用!
2
+
3
+ : author
4
+ 須藤功平
5
+ : institution
6
+ 株式会社クリアコード
7
+ : content-source
8
+ Redmine大阪 第17回勉強会
9
+ : date
10
+ 2017-08-26
11
+ : allotted-time
12
+ 50m
13
+ : theme
14
+ groonga
15
+
16
+ = よく活用されたRedmine
17
+
18
+ (('tag:center'))
19
+ (('tag:x-large'))
20
+ 情報の宝庫
21
+
22
+ * (('wait'))問題解決の経緯
23
+ * (('wait'))Wikiに整理したノウハウ
24
+
25
+ = さらに活用するために
26
+
27
+ * 必要なときに
28
+ * 必要な情報に
29
+ * 素早くアクセスしたい!
30
+
31
+ = 活用方法:検索!
32
+
33
+ # image
34
+ # src = images/redmine-search.png
35
+ # relative_width = 90
36
+ # reflect_ratio = 0.1
37
+
38
+ = 活用の壁
39
+
40
+ * よく活用されたRedmine
41
+ * 大量の情報(ただし((*玉石混合*)))
42
+ * (('wait'))さらに活用するための課題
43
+ * 大量→必要な情報を見つけにくい
44
+ * 大量→探す時間が増える
45
+
46
+ = 課題例1:検索ノイズが多い
47
+
48
+ # image
49
+ # src = images/redmine-search-noise.svg
50
+ # relative_height = 100
51
+ # reflect_ratio = 0.1
52
+
53
+ = 課題例2:検索が遅い
54
+
55
+ * (('wait'))本当に大量だとね!
56
+ * (('wait'))↓これくらいだと遅くない
57
+ * チケット数:4049
58
+ * コメント数:41264
59
+ * Wikiページ数:1081
60
+ * 1秒以内に返ってくる\n
61
+ (('note:キャッシュが効く:0.1sくらい'))\n
62
+ (('note:キャッシュが効かない:0.7sくらい'))
63
+
64
+ = 解決策
65
+
66
+ Groongaで\n
67
+ Redmineを\n
68
+ 高速・高精度\n
69
+ 全文検索
70
+
71
+ = 解決例1:検索ノイズがない
72
+
73
+ # image
74
+ # src = images/redmine-search-no-noise.svg
75
+ # relative_height = 100
76
+ # reflect_ratio = 0.1
77
+
78
+ = 検索ノイズ?
79
+
80
+ * 上位N件でがっかりする?
81
+ * がっかり→ノイズ多い
82
+ * ユーザーは上位N件しか確認しない
83
+ * Groongaはスコアを調整してソート
84
+ * 件数は関係ない
85
+ * 実はこの例ではヒット件数は同じ
86
+
87
+ = 解決例2:検索が速い
88
+
89
+ * ↓これくらいだと誤差
90
+ * チケット数:4049
91
+ * コメント数:41264
92
+ * Wikiページ数:1081
93
+ * 参考:\n
94
+ 既存(キャッシュあり)と\n
95
+ Groonga(キャッシュなし)が\n
96
+ 同じくらい
97
+
98
+ = 200万チケットのケース
99
+
100
+ (('note:https://twitter.com/akahane92/status/733832496945594368'))
101
+
102
+ # image
103
+ # src = images/redmine-search-speed.png
104
+ # relative_height = 100
105
+ # reflect_ratio = 0.1
106
+
107
+ = ここまでのまとめ
108
+
109
+ * Redmineをさらに活用したい!
110
+ * 素早く必要な情報にアクセス!
111
+ * 検索をがんばらないと!
112
+ * Groongaで全文検索!
113
+ * 検索ノイズが少ない!
114
+ * 速い!
115
+
116
+ = ここからの話
117
+
118
+ 導入したくなる情報を紹介
119
+
120
+ = インストール:RDBMS
121
+
122
+ * 対応RDBMS
123
+ * MySQLもPostgreSQLも!
124
+ * RDBMSにGroonga対応\n
125
+ プラグインをインストール\n
126
+ (('note:プラグイン:別途サービス管理不要→運用コスト増加なし'))
127
+ * MySQL:Mroonga
128
+ * PostgreSQL:PGroonga
129
+
130
+ = インストール:Mroonga
131
+
132
+ (('tag:center'))
133
+ (('note:http://mroonga.org/ja/docs/install.html'))
134
+
135
+ * パッケージで簡単インストール
136
+ * 対応プラットフォーム
137
+ * Debian GNU/Linux, Ubuntu
138
+ * CentOS Fedora
139
+ * macOS
140
+ * Windows
141
+
142
+ = インストール:PGroonga
143
+
144
+ (('tag:center'))
145
+ (('note:https://pgroonga.github.io/ja/install/'))
146
+
147
+ * パッケージで簡単インストール
148
+ * 対応プラットフォーム
149
+ * Debian GNU/Linux, Ubuntu
150
+ * CentOS Fedora
151
+ * macOS
152
+ * Windows
153
+
154
+ = インストール:プラグイン
155
+
156
+ % cd redmine
157
+ % git clone \
158
+ https://github.com/okkez/redmine_full_text_search.git \
159
+ plugins/full_text_search
160
+ % bin/rake redmine:plugins RAILS_ENV=production
161
+
162
+ (('tag:center'))
163
+ 再起動で完了!
164
+
165
+ = 高度な検索1:AND/OR/NOT
166
+
167
+ * キーワード単位でのAND/OR/NOT
168
+ * 従来:AND/ORのみ
169
+ * 従来:キーワード全体で切り替え
170
+ * 例:
171
+ * (Groonga OR Mroonga) -PostgreSQL
172
+ * GroongaまたはMroongaを含むが\n
173
+ PostgreSQLは含まない
174
+
175
+ = 高度な検索2:並び順の変更
176
+
177
+ * ソート対象:スコア・更新時刻
178
+ * 従来:更新時刻のみ
179
+ * ソート順:昇順・降順
180
+ * 従来:降順のみ
181
+
182
+ = 並び順の変更UI
183
+
184
+ # image
185
+ # src = images/redmine-search-sort-options.png
186
+ # relative_height = 100
187
+ # reflect_ratio = 0.1
188
+
189
+ = ここまでのまとめ
190
+
191
+ * 簡単にインストールできる
192
+ * 運用も楽
193
+ * AND/OR/NOTを使える
194
+ * 絞り込みに便利
195
+ * 並び順をカスタマイズできる
196
+ * スコアと更新時刻で十分
197
+
198
+ = 2017年5月以降の話
199
+
200
+ * redmine.tokyo 第12回勉強会
201
+ * 2017年5月
202
+ * ノイズが少なくて高速
203
+ * その後
204
+ * 高速化
205
+ * 類似issue検索対応
206
+
207
+ = 高速化
208
+
209
+ * 旧
210
+ * LIKE検索をGroongaに置き換え
211
+ * 他の条件はそのまま
212
+ * 新
213
+ * すべてGroongaで検索
214
+ * 高速・柔軟・高度な検索をサポート
215
+
216
+ = データの扱い
217
+
218
+ * 旧
219
+ * 正規化してデータを保存
220
+ * 検索時に複数回のSELECT
221
+ * 新
222
+ * 1つのテーブルにデータを保存
223
+ * 1回のSELECTで検索(((*速い*)))
224
+
225
+ = 柔軟
226
+
227
+ * ドリルダウンで対象を分別
228
+ * チケットn件・Wikiページn件とか
229
+ * 標準でもあるやつ
230
+ * ハイライト・スニペット
231
+ * 標準よりもいい感じ
232
+ * 類似文書検索
233
+
234
+ = 類似文書検索
235
+
236
+ (('tag:center'))
237
+ (('tag:x-large'))
238
+ (('tag:margin-bottom * 3'))
239
+ 活用例
240
+
241
+ * 類似issue検索
242
+ * 実装着手
243
+ * 類似Wiki検索
244
+ * 未実装
245
+
246
+ = 類似issue検索
247
+
248
+ # image
249
+ # src = images/similar-issues.png
250
+ # relative_height = 95
251
+ # reflect_ratio = 0.1
252
+
253
+ = 類似issue:ユースケース
254
+
255
+ * 新しい問題が発生!
256
+ * あれ?どこかで見たような…
257
+ * プラグイン:
258
+ * 「このissue、似ていませんか?」
259
+ * →問題の早期解決!
260
+
261
+ = 類似issue検索:現実装
262
+
263
+ * issue閲覧時
264
+ * 自動で類似issueを提示
265
+ * Groonga内のデータを活用
266
+ * テキストデータで類似文書検索
267
+ * 精度
268
+ * まぁまぁ
269
+
270
+ = ここからの話
271
+
272
+ 今後の野望
273
+
274
+ = 類似issue検索精度向上\nメタデータを活用
275
+
276
+ * 手動設定の関連issue情報使用
277
+ * 属性情報使用
278
+ * カテゴリとかトラッカーとか
279
+ * 同一プロジェクトに限定する
280
+ * Wikiも対象に加える
281
+
282
+ = 類似issue検索精度向上\n機械学習技術を活用
283
+
284
+ * 字面でなく意味で類似文書検索
285
+ * 例:メールのthreadとプログラムのthreadは違う
286
+ * 例:MroongaでMySQLも類似度向上
287
+ * 回答の自動生成\n
288
+ (('note:RNNを用いた機械翻訳とか'))
289
+ * 類似issueの結論を探さなくてよい
290
+
291
+ = データ活用に向けて
292
+
293
+ * GroongaにPython組込
294
+ * Rubyでデータ処理
295
+ * Red Data Tools
296
+ * Apache Arrow
297
+ * 次世代データ交換フォーマット
298
+ * コミッターになった!
299
+
300
+ = 類似issue\n共同開発組織募集
301
+
302
+ * 精度向上にはデータが不可欠
303
+ * データを持っていそうな組織
304
+ * 大量ユーザー・長期間運用組織
305
+ * マネージドサービス提供組織
306
+ * Redmine内データを活用したい\n
307
+ 組織はぜひ!
308
+
309
+ = 添付ファイル内全文検索
310
+
311
+ * 現状:ファイル名と説明
312
+ * テキスト抽出できれば検索可能
313
+ * テキスト抽出ツール例:ChupaText\n
314
+ (('note:Groongaプロジェクトのテキスト抽出ツール'))
315
+
316
+ = 添付ファイル内全文検索\n実装案
317
+
318
+ * テキスト抽出部分をプラグインできるようにすればRedmine本体に入れられるのでは!?
319
+ * ChupaTextよりApache Tikaを使いたい人もいそう
320
+ * 検索はLIKEでよい\n
321
+ (('note:Groongaプラグインを入れたら高速になる、でよい'))
322
+ * だれかチャレンジしない?
323
+
324
+ = 入力補完
325
+
326
+ * 検索ボックス
327
+ * 入力に応じてキーワードを随時提示
328
+ * ↑ヒットするもののみ
329
+ * 各種入力欄(タイトルなど)
330
+ * 入力に応じて既存内容を随時提示
331
+ * ローマ字でインクリメンタルサーチ
332
+
333
+ = 入力補完:ユースケース
334
+
335
+ * 検索ボックス
336
+ * 自然と適切な検索に誘導!
337
+ * 例:typoを防ぐ・表記揺れを吸収
338
+ * 各種入力欄
339
+ * 自然と表記を統一!
340
+ * →検索しやすい・理解しやすい
341
+ * 例:typoを防ぐ・表記揺れを吸収
342
+
343
+ = 入力補完:実装
344
+
345
+ * Groonga内のデータを活用
346
+ * どのくらいヒットするキーワード?
347
+ * ログも活用:検索頻度は?
348
+ * メタデータも活用:\n
349
+ プロジェクト・トラッカー毎に\n
350
+ 文脈をわける
351
+ * 開発協力者を募集
352
+ * 実装・データ提供・発注など
353
+
354
+ = 同義語展開
355
+
356
+ * 表記揺れを吸収
357
+ * 例:「打ち合わせ」・「打合せ」
358
+ * 吸収:「打ち合わせ OR 打合せ」
359
+ * 同義語は管理が大変!
360
+ * 文脈で異なる!増減する!
361
+ * 同義語管理を支援
362
+ * 例:同義語候補を自動生成
363
+
364
+ = 同義語展開:ユースケース
365
+
366
+ * 検索ボックス
367
+ * 欲しい情報にたどり着ける!
368
+ * 表記揺れによる未発見を解消
369
+ * 同義語管理のコスト削減
370
+ * Redmine内のデータを\n
371
+ より低コストで有効活用!
372
+
373
+ = 同義語展開:実装
374
+
375
+ * Groongaの組み込み機能を活用
376
+ * 高速に同義語展開が可能
377
+ * 同義語候補を機械学習
378
+ * Groonga内のデータを活用
379
+ * 開発協力者を募集
380
+ * 実装・データ提供・発注など
381
+
382
+ = スマートナビ(仮)
383
+
384
+ * 言わなくても欲しいものを提示
385
+ * 例:駅の近くでスマホを見る\n
386
+ →その駅の時刻表を((*自動で*))表示
387
+ * ポイント:ユーザーは\n
388
+ 「駅名 時刻表」で\n
389
+ ((*明示的に*))検索して((*いない*))!
390
+
391
+ = スマートナビ:ユースケース
392
+
393
+ * .oO(打ち合わせのアジェンダをWikiにまとめておこう)
394
+ * Redmine:ホーム画面に該当Wikiページのリンクを表示
395
+
396
+ = スマートナビ:実装
397
+
398
+ * 行動履歴から知識を学習
399
+ * 打ち合わせ前にいつもWikiを更新
400
+ * 内容から事実を収集
401
+ * Wikiページ内のテキスト\n
402
+ 「参加者:○○…」から抽出
403
+ * 開発協力者を募集
404
+ * 実装・データ提供・発注など
405
+
406
+ = ここまでのまとめ
407
+
408
+ * このプラグインの現状
409
+ * Redmineの不便を解消\n
410
+ (マイナスを少しプラスに)
411
+ * このプラグインの今後
412
+ * Redmineをさらに有効活用!\n
413
+ (少しプラスをすごくプラスに)
414
+
415
+ = ここからの話
416
+
417
+ Redmineの開発に\n
418
+ 参加しよう!
419
+
420
+ = 開発に参加?
421
+
422
+ * Redmine本体のコードを書く\n
423
+ ((*だけじゃない*))
424
+ * バグレポート・テスト・issue対応
425
+ * ドキュメント作成・宣伝
426
+ * プラグインを作る\n
427
+ ((*だけじゃない*))
428
+ * 本体と同様↑のことも大事な開発
429
+
430
+ = 開発の参加例
431
+
432
+ * Groongaプラグイン開発時の\n
433
+ 知見をフィードバック
434
+ * Defect #21993: サイズ上限が小
435
+ * Patch #23153: フックを追加
436
+ * Feature #25198: スコアを表示
437
+
438
+ = 敷居が高そう?
439
+
440
+ * OSS Gateワークショップへ\n
441
+ 参加してみよう
442
+ * 「OSS開発に参加」を経験できる\n
443
+ (('note:(Redmineもプラグインの多くもOSS!)'))\n
444
+ (('note:(もちろんこのプラグインもGroongaもOSS!)'))
445
+ * https://oss-gate.doorkeeper.jp/
446
+
447
+ = 添付ファイル内全文検索を\n実装したい!
448
+
449
+ 私に相談だ!
450
+
451
+ = まとめ
452
+
453
+ * Redmineをさらに活用するなら\n
454
+ Groongaプラグインを使おう!
455
+ * Redmineの開発に参加しよう!
456
+ * OSS Gateワークショップが役立つ
457
+ * 宣伝:全文検索のことは\n
458
+ クリアコードに相談しよう!