kobito-oss のソースの読み方

  • 2
    いいね
  • 0
    コメント

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

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月から別の仕事なので、ベストエフォートで。