Kobito
kobito-oss

kobito-oss のソースの読み方

More than 1 year has passed since last update.

メインの開発者として、備忘録を残しておく。

https://github.com/increments/kobito-oss

どんなものか試したい人は、 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月から別の仕事なので、ベストエフォートで。