メインの開発者として、備忘録を残しておく。
どんなものか試したい人は、 https://mizchi.github.io/kobito-oss/ で、IndexedDBの許す5MBぐらいまでは試せる。
一応言っておくと、これは僕が退職するんでOSS化ってわけではなく、元々あった計画の前倒しです。時期が早まったのはある。
以下、どのようにコードを読むか。
念頭に置くこと
- 2年前 の技術選定のスタック
- Mac版Kobitoと仕様が違う。Kobitoと同期しない、Inboxという仮グループがある。
- mizchi/arda
- electron 以前の atom-shell 時代の互換コードが一部残ってる
- 細々とバグ対応はしつつ、あんまり依存パッケージのメンテ出来てなかった
- 公開にあたって、個別のタスクの綺麗さより、ビルドできるの優先した
- とりあえず yarn で固定して yarn upgrade-interactive でバージョンを上げた
- View周りが jade(pug)/coffee, それ以外が typescript
直したかったが、既存のものとの互換性を優先したもの
- 今だったら mizchi/md2react より remark-react を使う
- 当時IMEが壊れていたので、codemirror にパッチを当てまくったものを使ってるが、今だったらHEADで動く気がする
- coffeeはやめたいが、coffee => es2015 は検証する量が多くて無理(decaffeinate は完全ではない)
- react-jade も、あんまりメンテされてなくて、不穏
- typescript の module を使ってる箇所と使ってない箇所がある。連結方法も古い。(tsconfig.jsonが仕様になる前に書かれたので後から書き足している)
- コンパイラを更新して検出されるようになったものについては、any で潰した。すまん。
とりあえず動かしてみる
ベース部分(SPA部分)ビルドする。
$ git@github.com:increments/kobito-oss.git
$ cd kobito-oss
$ cp config.json.example config.json
$ script/build
electorn パッケージを介して起動
$ npm install -g electron
$ electron electron-packager/browser
このとき、ファイル監視してビルドするタスクを走らせておけば、electron をリロードすると自動で適用される。
$ cd application
$ yarn watch
ブラウザ版で確認したい場合
$ cd application
$ yarn build
これで application/public/index.html をブラウザで開くと表示されるはず。(yarn watch タスクはブラウザ版で必要なものをビルドしていない。これはすべてを browserify するのが重いから)
ビルドが終わったら、public 以下が完全なSPA。
Web版の制限
- Qiitaにログインできない
- 右クリックのコンテキストメニューは出ない
ここだけElectron依存になってたため。自分でアクセストークンを入手して設定すれば動く、かも。
Qiita へのログイン機能を有効化する
https://qiita.com/settings/applications からアプリケーションを登録する。注意点として、QiitaだけでなくQiita:TeamへのRead/Writeも取得すること。リダイレクト先はとりあえず https://qiica.com などを推奨。
あとは kobito-oss の config.json に clientId / clientSecret を埋め込んでからビルドする。自分自身がOAuth のホストにもなるので、 secret も必要。
バイナリの作り方
script/build
cd electron-packager
# mac
script/build-mac
# win
script/build-win
Linux ビルドの作り方
は用意してないが、既存のタスクをみて electron-packager のオプションでガチャガチャやればできるはず。
今後の開発方針
increments としては、あまり積極的にメンテ出来ない。本家とは切り離されているので、ここにコントリビュートしても適用されるわけではない。
寄ってたかって開発したい人が複数いるなら、kobito-usergroupなどのグループを取って、そこで開発してはどうか。可能な限り、質問に応えるが、4月から別の仕事なので、ベストエフォートで。