もう探さない!【コント】「決断できない私」を変える、AFFiNEという名のオーダーメイドサラダ(ナレッジベース)
だって、NotionとかMiroみたいに「人気者」の影に隠れて、地道に努力してる感じが、まるで「夜食を我慢している私」みたいじゃないですか!でも、オープンソースでカスタマイズ可能って聞くと、ただの「低カロリー食品」じゃなくて、「自分で素材を選べるオーダーメイドのサラダ」みたいで、わくわくしますよね!
「AFFiNE」は、計画(Planning)、整理(Sorting)、作成(Creating)を一つにまとめた「次世代ナレッジベース」とのこと。ソフトウェアエンジニアとしては、開発プロセス全体を効率化するツールとして、まさに「代謝を上げる運動」のように活用できます!
役に立つ点
開発仕様書、設計ドキュメント、技術調査メモなどを一つのワークスペースに集約できます。まるで「栄養バランスの取れた定食」のように、どこに何があるか一目で分かります。
Markdownとビジュアルなキャンバス機能(Miro的な部分)をシームレスに切り替えられるので、「コードで構造化された設計図」と「ブレインストーミングの自由な図」を両方同時に管理できます。
「コント」 「あれ、あの設計書どこだっけ?Notion?Wiki?いや、あの付箋に書いたやつか!」と探しまわる「迷走する私」から卒業できます!
役に立つ点
タスク管理ボード(カンバン)、知識マップ、データベース機能を使って、プロジェクトの進捗や技術的な課題を整理できます。
オープンソースなので、例えばGitリポジトリと連携するプラグインを自作したり、「うちのチームに最適なタスク管理方法」にカスタマイズできます。
「コント」 「今日はタスクをやるぞ!」「...あれ、タスク多すぎて、どれから手を付けていいか分からず、結局ネットサーフィン」という「決断できない私」にサヨナラ!
役に立つ点
プライバシー重視でローカル環境での利用も可能。機密性の高いプロジェクトのドキュメントを、外部サービスに置きたくない場合に安心です。「誰にも見られない秘密のダイエット日誌」を持つような安心感です。
ソースコードが公開されているため、セキュリティ監査が容易で、必要な機能を自分で追加・修正できます。「自分の体質に合わせて運動メニューを組む」自由度があります。
「AFFiNE」は、主にデスクトップアプリ(Electron)として、またはセルフホストのWebアプリとして導入できます。ソフトウェアエンジニアなら、セルフホストやソースコードからのビルドに挑戦するのが「AFFiNE」の真価を体験する第一歩です。
最もエンジニア的な導入は、GitHubからソースコードをクローンして実行することです。
リポジトリのクローン
git clone https://github.com/toeverything/AFFiNE.git
cd AFFiNE
依存関係のインストール
(Node.jsとYarnが必要です)
yarn install
開発モードでの実行
yarn start
# または、プロダクションビルドの場合
# yarn build
これで、ローカル環境で「AFFiNE」が起動します。まるで「自前のジムを開く」ような感覚ですね!
「AFFiNE」はTypeScript/Reactで書かれているため、カスタム機能を追加するなら、この環境に慣れる必要があります。例えば、ドキュメントのヘッダーに現在のGitブランチ名を表示するカスタムウィジェットを考えてみましょう。
「AFFiNE」のAPIや拡張ポイントの具体的な情報は、公式ドキュメント(GitHubリポジトリ内やWebサイト)を確認する必要がありますが、ここでは概念的なカスタマイズの例を挙げます。
カスタムコンポーネントの概念的な例 (React/TypeScript風)
// 完全に概念的なサンプルです。実際のAFFiNEのAPIは異なります。
import React from 'react';
// AFFiNEが提供する可能性があるCore API
import { useCurrentWorkspace, registerWidget } from '@affine/core-api';
// カスタムウィジェットのコンポーネント
const GitBranchIndicator: React.FC = () => {
// 現在のGitブランチ名を取得するカスタムフック(自作が必要)
const { gitBranch } = useCustomGitHook();
if (!gitBranch) {
return <span style={{ color: 'gray' }}>Git情報なし</span>;
}
// ドキュメント上部に表示
return (
<div style={{ padding: '4px 8px', backgroundColor: '#e6f7ff', border: '1px solid #91d5ff', borderRadius: '4px' }}>
**作業ブランチ:** `{gitBranch}`
</div>
);
};
// AFFiNEの拡張ポイントに登録
// このregisterWidget関数も仮のものです。
registerWidget('document-header-left', GitBranchIndicator);
「コント」 「既存のツールは私のニーズに合わない!」と文句を言う代わりに、「よし、私の理想の筋肉(機能)は自分で鍛え上げる!」と、拡張機能開発に挑戦する「意識の高い私」になりましょう!
さあ、この「AFFiNE」を導入して、あなたの開発プロセスも「無駄な脂肪(非効率)」を燃やし、「引き締まった筋肉(効率的なナレッジベース)」を手に入れましょう!