GROWI(グローウィ)

## １．はじめに

2023年5月から、AIの実験と使い方について試行錯誤しています。しかし、オフィスでよく使用されるWord、Excel、PowerPointなどのファイルとAIの相性が良くないと感じています。

具体的には、2024年4月時点で、LangChainなどのドキュメントリーダを使ってWordやPowerPointのテキスト部分だけを抽出し、RAG（Retrieval-Augmented Generation）技術を用いてLLMを組み込んだチャットボットから社内の知識データを閲覧して、AIに会社の情報を回答させるという方法が主流です。しかし、構築する過程で、画像なども一緒に検索できたらと思うようになりました。

現時点では、マルチモーダル技術はGPT4-Visionを代表とするLLMで実現可能です。また、Azure AI Document IntelligenceのOCR技術や画像切り出し技術を用いて、理想的なことも実現しそうだとわかってきています。しかし、まだコストが高いのが現状です。

それでも、原点に戻ると、技術者としては普段扱うデータがWordやExcel、PowerPointである必要はなく、AIが簡単に処理でき、短時間で加工可能なドキュメント形式が十分だと考えるようになってきました。

Word、Excel、PowerPointは見栄えが良く、一般的に好評ですが、PowerPointで作成した図のメンテナンスは大変です。図を修正するだけで1時間も費やすことが、馬鹿馬鹿しく感じられます。

特にチームで情報を素早く共有し、迅速な意思決定を行うために、オフィス文書は適していないと考えています。
そのため、AIが簡単に扱え、すぐに修正でき、ドキュメントの管理が簡単で、検索も容易な形式が求められます。その結果、Markdownという形式が適していると考えました。

## ２．素早く書けるドキュメントツール

ドキュメンテーションの時間を最小限に抑え、考える部分に時間を割くために、Wikiなどのドキュメントツールが適していると考えました。さらに、LLMは大量のインターネット上の情報をトレーニングデータとして扱っているため、実際の実験から、Markdown記法の方がAIが処理しやすいと分かりました。その結果、Markdownで書けるWikiシステムが良いと結論付けました。

例えば、Azure AI Document Intelligenceでは、内部的にはMarkdown形式に一度変換してからベクトルを生成し、RAGを実施しているようです。そのため、私のおすすめはMarkdownです。

以下の条件でドキュメントツールを探すことにしました。

| No | 条件 | 詳細 |
| --- | --- | --- |
| 1 | Markdown＋Mermaid/PluntUML/diagrams.netが利用可能 | マークダウンにより簡単な記述で文章を整形できます。MermaidやPlantUML、diagrams.netを用いることで図やフローチャート等を簡単に描くことができます。 |
| 2 | ユーザ管理が可能 | 各ユーザーの権限を管理することができるため、情報へのアクセス制御が可能です。これにより、必要な情報だけを必要な人に提供することができます。 |
| 3 | 履歴管理が可能 | ドキュメントの変更履歴を管理できるため、以前のバージョンに戻すことが可能です。これにより、誤って情報を削除した場合でも復元が可能となります。 |
| 4 | 記事検索が可能 | 情報が増えてきても、検索機能により必要な情報を素早く見つけることができます。これにより、情報の探索時間を大幅に削減できます。 |

上記の条件を加味して、いろいろとネット検索やperplexity.aiなどを駆使して調査した結果、以下のような候補が上がりました。

この中ではネイティブでMarkdownに対応できているGROWIが頭一つ飛びぬけているように感じました。
リアルタイムコラボレーション機能も素敵です。

| No | Wikiシステム | 特徴 | 差別化ポイント |
| --- | --- | --- | --- |
| 1 | GROWI | Markdown, Mermaid, PlantUML, diagrams.net対応。ユーザ管理、履歴管理、記事検索機能あり。 | 高度なカスタマイズ可能性と拡張性。リアルタイムコラボレーション機能あり。 |
| 2 | Confluence | Markdownのプラグイン利用可能。高度なユーザ管理と履歴管理。強力な記事検索機能。 | リッチな組み込みエディタ。JIRAとの深い統合。 |
| 3 | DokuWiki | Markdownプラグインが利用可能。ユーザ管理、履歴管理、記事検索機能。 | 軽量で、設定が容易。名前空間による独特のページ整理方法。 |
| 4 | MediaWiki | Markdownは拡張機能で利用可能。強力なユーザ管理と履歴管理、記事検索機能。 | 多言語対応。Wikipediaのプラットフォームとして広く認知されている。 |
| 5 | Tiki Wiki | Markdownプラグインが利用可能。高度なユーザ管理、履歴管理、記事検索機能。 | 多機能で、フォーラムやブログ、イベント管理なども可能。 |

## ３．PowerPointやWordやExcelは使わないの？

答えは「No」です。Microsoft 365 Copilotなどでは、Wordで作成した下書きからPowerPointを生成したり、Excel in Copilotではシート内のテーブルをAIが処理できるようにオフィス文書管理が設計されています。そのため、Markdownを入力としてPowerPointを生成したり、MarkdownのテーブルをWord内の表に変換したり、diagrams.netで作成したSVG形式のベクターデータの図を挿入することも可能だと考えられます。
私は、Markdownを日常的に使用し、公式なドキュメントはMarkdownから生成するのが良いと考えています。

## ４．GROWIとは

GROWIは、WESEEKが開発しOSSとして公開しているJavaScript(Node.js)製の情報共有ツールです。エンジニアに馴染みのあるMarkdown形式で記述可能かつ柔軟な階層構造での情報管理が可能なのが特徴です。

開発元のWESEEKは創業以来、PHP製のWikiであるPukiWikiを使用してきました。しかし、時代の流れに乗るため、2017年にMarkdown形式で記述可能な社内情報共有システムへの移行を決定しました。その際に様々なソフトウェアやSaaSを試用しましたが、使い勝手とコストの観点から見て満足できるプロダクトは見つかりませんでした。

自社でGROWIの開発を開始し、数多くのリリースを経てブラッシュアップを重ねてきました。その過程で、GROWIユーザーの中には「もっと簡単に」「もっと安価に」情報共有ツールを導入したいというニーズが多いことを実感しました。WESEEKと同じ課題を抱えていた個人、団体、企業の力になりたいという思いから、今回GROWI.cloudを開発・提供することに決めました。

WESEEKは、このプロジェクトを通じてコラボレーションとナレッジ共有に注力しています。

GROWIは2019年8月21日に最初のオープンβ版がリリースされました。それ以来、成長を続けており、多くのユーザーコミュニティによって支持されています。GROWIは、その前身であるCrowiから派生したフォークプロジェクトです。CrowiもまたシンプルなセットアップとMarkdownに対応したウェブベースのWikiプラットフォームであり、強力な検索機能やMarkdownによる編集機能といった特徴がありました。

WeSEEKはCrowiのコードベースを引き継ぎ、さらに使いやすさを追求し、多機能性を加えることでGROWIを開発しました。これにより、より豊富な機能とカスタマイズ性を実現しつつ、Crowiの直感的なUI/UXを維持しています。結果として、GROWIは日々の業務において情報を効率的に共有・管理するためのツールとして、多くの企業や個人に選ばれています。

## **５．GROWIの特徴**

| No | 特徴 | 説明 |
| --- | --- | --- |
| 1 | シンプルなインターフェース | GROWIは直感的なインターフェースを提供し、使いやすさを重視しています。初めてのユーザーでも簡単に操作できます。 |
| 2 | 柔軟なカスタマイズ性 | GROWIは拡張性に優れており、ユーザーが独自の機能やテーマを追加することができます。さまざまなプラグインが利用可能であり、必要に応じて機能を追加することができます。 |
| 3 | リアルタイムコラボレーション | GROWIは複数のユーザーが同時にドキュメントを編集できるリアルタイムコラボレーション機能を提供します。複数の人々が協力して情報を共有する場合に便利です。 |
| 4 | 豊富な機能セット | GROWIは、ページの作成や編集、ファイルのアップロード、コメントの追加など、さまざまな機能を提供しています。また、Markdown形式をサポートしており、簡潔な文法でドキュメントを作成できます。 |

## **６．機能**

Growiは柔軟な機能セットを備えたWikiシステムで、チームや組織がナレッジ共有を行うために設計されています。
以下はGrowiの主要な機能の一部です。

| No | 特徴 | 説明 |
| --- | --- | --- |
| 1 | Markdown対応エディタ | ユーザーはMarkdown形式で文書を編集可能。リアルタイムプレビューを利用して、編集内容を即時確認。 |
| 2 | 階層型ページ管理 | ページをフォルダ構造として整理し、直感的にナビゲート。階層的に情報を整理しやすくする。 |
| 3 | フルテキスト検索 | Elasticsearchを使用した強力な検索機能。文書の内容全体からすばやく情報を見つけ出せる。 |
| 4 | グループとユーザーによるアクセスコントロール | ページ毎に閲覧や編集の権限を設定。強固なセキュリティを提供し、適切なユーザーのみがアクセス可能。 |
| 5 | プラグインによる拡張性 | 機能を拡張するためのプラグインシステム。カスタマイズ性を高め、さまざまなニーズに対応。 |
| 6 | レスポンシブデザイン | あらゆるデバイスで使いやすいUI。スマートフォンやタブレットからもアクセス可能。 |
| 7 | 豊富なインポート・エクスポートオプション | 他のプラットフォームからのデータ移行をサポート。データのバックアップと復元が容易。 |
| 8 | マルチ言語対応 | 複数言語に対応し、国際的なチームでも使用可能。 |
| 9 | カスタマイズ可能なテーマ | ユーザーの好みや企業のブランドに合わせたデザイン変更が可能。 |
| 10 | 統合機能 | SlackやGitHub等との連携が可能。作業の効率化とコミュニケーションの促進。 |
| 11 | リアルタイムプレビュー | リアルタイムプレビューを利用して、編集内容を即時確認。 |

## ７．GROWIのディストリビューション

[GROWI Docsの管理者ガイド](https://docs.growi.org/ja/admin-guide/)によれば、GROWIにはdocket-compose版、Ubuntu版、CentOS版の３つのインストール方法が紹介されています。

### 7.1 docker-compose版とは

docker-compose版は、GROWIを簡単にローカル環境で起動するためのものです。

このバージョンは、GROWI本体、MongoDB、Elasticsearch、https-portalといった依存する各コンテナを一括で起動できるため、手軽にGROWIを試すことができます。

ただし、この方法は、本格的な運用環境では推奨されていません。本格的な運用環境では、各サービスを個別にセットアップし、適切に設定と管理を行うべきです。

### 7.2 Ubuntu Server版

Ubuntu Server版は、Ubuntu Server上でGROWIを簡単に起動するためのバージョンです。

このバージョンでは、GROWI本体とMongoDB、Elasticsearchの各コンテナを一括で立ち上げることが出来ます。これにより、Ubuntu Server上で手軽にGROWIを試すことが可能となります。

### 7.3 CentOS版

Ubuntu Server版は、Ubuntu Server上でGROWIを簡単に起動するためのバージョンです。

このバージョンでは、GROWI本体とMongoDB、Elasticsearchの各コンテナを一括で立ち上げることが出来ます。これにより、Ubuntu Server上で手軽にGROWIを試すことが可能となります。

### 

## ８．WSL2 dockerでの導入実験

[GROWI Docsのdocker-cpmpose](https://docs.growi.org/ja/admin-guide/getting-started/docker-compose.html)ページの手順に簡単に導入できます。

```
[root@Ardbeg ~]# pwd
/root
[root@Ardbeg ~]# ls
anaconda-ks.cfg  anaconda-post.log  original-ks.cfg  run_mermaid.sh
[root@Ardbeg ~]# git clone https://github.com/weseek/growi-docker-compose.git growi
Cloning into 'growi'...

...  

 => [app fetch-dockerize 2/2] RUN apt-get update && apt-get install -y curl     && curl -sL https://github.com/j  66.2s
 => [app stage-1 2/2] COPY --from=fetch-dockerize --link /usr/local/bin/dockerize /usr/local/bin/dockerize        43.3s
 => [app] exporting to image                                                                                       0.1s
 => => exporting layers                                                                                            0.1s
 => => writing image sha256:40cddd01b60268f7caa563fcbc07a6bf8ca410d347e50faa94f73df7f458d9a3                       0.0s
 => => naming to docker.io/library/growi-app                                                                       0.0s
[+] Running 8/8
 ✔ Network growi_default            Created                                                                        0.0s
 ✔ Volume "growi_growi_data"        Created                                                                        0.0s
 ✔ Volume "growi_mongo_configdb"    Created                                                                        0.0s
 ✔ Volume "growi_mongo_db"          Created                                                                        0.0s
 ✔ Volume "growi_es_data"           Created                                                                        0.0s
 ✔ Container growi-mongo-1          Started                                                                        0.1s
 ✔ Container growi-elasticsearch-1  Started                                                                        0.1s
 ✔ Container growi-app-1            Started                                                                        0.1s
[root@Ardbeg growi]#
[root@Ardbeg growi]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS
NAMES
585694fefa7e   growi-app             "dockerize -wait tcp…"   24 seconds ago   Up 23 seconds   127.0.0.1:80->3000/tcp   growi-app-1
ca915040e4fa   growi-elasticsearch   "/bin/tini -- /usr/l…"   25 seconds ago   Up 23 seconds   9200/tcp, 9300/tcp       growi-elasticsearch-1
fd8a7425e657   mongo:6.0             "docker-entrypoint.s…"   25 seconds ago   Up 23 seconds   27017/tcp
growi-mongo-1
[root@Ardbeg growi]#
```

growi/docker-compose.ymlの以下の部分を編集してLocalhost以外からのアクセスを許可します。

```
  #- 127.0.0.1:3000:3000    # localhost only by default
  - 127.0.0.1:80:3000    # localhost only by default

```

growiフォルダ配下でdocoker-compose up -dを実行

http://127.0.0.1 にアクセスする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764962/6fdc9777-f3bb-de85-0d41-abef769abc49.png)

アカウントを作成してサインインして記事を書いてみる
Qiita記事のような感覚でmarkdownを書くことができるので、ドキュメント作成の時間を省略できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764962/3d1f9942-f8fc-f22a-a66a-c70ed86ece54.png)

## ９．リバースプロキシー(https-portal)

[https-portalで簡単https対応！ #Docker - Qiita](https://qiita.com/Yuttti/items/2a985174583e71ba46a0)

## １０．ドキュメンテーション

- [GROWI Docs](https://docs.growi.org/en/)
    - [Admin’s guide - GROWI Docs(en/ja)](https://docs.growi.org/en/admin-guide/)

## １１．リポジトリ

- [weseek/growi](https://github.com/weseek/growi)  (GitHUB)
- [weseek/growi-docker-compose](https://github.com/weseek/growi-docker-compose)  (GitHUB)
- [weseek/growi](https://hub.docker.com/r/weseek/growi/)  (dockerhub)

## １３．トラブルシュート

私がGROWIを動かす際にハマった点をGROWIのGitHUB issuesページのリンクを添えて紹介します。

- 企業プロキシ問題
企業プロキシ環境(クラウドプロキシサービス)下でWebsocker通信が失敗してGROWIの編集画面でMarkdownテキスト(左側ペイン)が表示されない問題があった。
回答：残念ながらGROWI V7のエディタではyjsというライブラリを常時利用する仕様になっており、websocket(ws/wss)通信が必須となっている。
対策：squidやhttpd-proxyなどのOSSのプロキシサービスを利用する。
・**[[7.0.x] Websocket による通信ができない環境で既存ドキュメントの編集できない #8722](https://github.com/weseek/growi/issues/8722)**
- 

## １４.参考URL

- [OSS開発wikiツールのGROWI | 快適な情報共有を、全ての人へ](https://growi.org/ja/)
- https://github.com/weseek/growi
- [weseek/growi - Docker Image | Docker Hub](https://hub.docker.com/r/weseek/growi/)
- [GROWI Docs](https://docs.growi.org/ja/)
- [【Docker入門】Rocky Linux 9 にDocker & Docker Composeをインストールする | テックぽん ブログ (ponsanlabo.com)](https://ponsanlabo.com/install-docker-dockercompose-in-rockylinux/)
- [Rocky Linux8へDockerをインストールする | No pain,No gain. (ufirst.jp)](https://ufirst.jp/memo/2023/02/rockey-linux8%E3%81%B8docker%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/)
- [社内wiki｜GROWI(グローウィ)の使い方や料金、評価を解説 – 業務効率化ガイド｜業務効率化のノウハウを発信するメディア (stock-app.info)](https://www.stock-app.info/media/growi/#GROWIwiki)

## １５．関連情報

- [Markdownで書ける情報共有ツールを簡単・安価に導入！「GROWI.cloud」がオープンβ版を提供開始｜株式会社WESEEKのプレスリリース (atpress.ne.jp)](https://www.atpress.ne.jp/news/191476)