blogに引っ越しました。3.3.1UserStreamの処理でクラッシュすることがあったリストの追加でクラッシュすることがあったバグフィックスです。今年最後のアップデートだと思います。明日からはコミケに参加してきますので。3.3を使っていたらステータスバーに表示されているのでご存知かもしれませんが、コミケ3日目にはmikutterの薄い本が頒布されます。今回も私は寄稿させてもらいました。危うく前回が遺稿になるところだったことを考えると、今回も又私の記事に金を出せる皆さんは本当に幸運ですよ。3.3のPostboxのお話です。3.3では、Postboxに大幅な改修が入りました。古いAPIで呼び出しても一応、今までどおり動作します。動かなければ、mikutter側の不具合として修正される可能性があります。そこは信頼と安心のmikutterなのですが、かといって変更されたということは以前ではいろいろと不便だったわけです。これを機に、新しい使い方を学びましょう。PostboxとはTwitterへ投稿するテキストを入力する場所です。Messageもこれが使われています。これだけ基本的な機能なので、mikutter最初期からあるコードでもあります。http://dev.mikutter.hachune.net/projects/mikutter/repository/changes/core/mui/gtk_postbox.rb?rev=masterPostboxを使うrdocを見れば、Postboxで新しくできるようになったことがなんとなくわかります。今回は従来でも出来たことも合わせて、こいつが何を出来るのか見ていきます。プラグインDSLメソッドを使います。実際にcommandプラグインを見てみるのが一番です。リプライを送るためのPostboxを呼び出すために、opt.widget.create_postboxを呼び出しています。ここでopt.widgetは、:timelineロールのコマンドなので、Plugin::GUI::Timelineのインスタンスです。ReplyReplyは簡単で、to:に宛先のMessageを指定するだけでReplyにはなります。Nameを入力しなくてもReplyになってしまいます。Nameから始めるのが普通なので、最初からこれを入力しておく必要があります。mikutterでは最初からPostboxに内容を入力しておくためにheader:オプションとfooter:オプションが用意されています。値はStringで、カーソルの前に入れるか、後に入れるかの違いです。Nameを入れるので、headerを使っています。最後に、use_blind_footer:というパラメータはtrueかfalseで、設定の「入力>フッタ>リプライの場合はフッタを表示しない」で設定された値を渡しています。これが真になると、設定したフッタが入ります。footer:はプラグインから設定するfooter、use_blind_footer:が指すfooterはユーザが設定するフッタを使うか否か、です。ややこしいですが我慢しましょう(後述)。ReTweetこれについてはcommandプラグインの60行目あたりにあります。いわゆる非公式リツイートというやつです。古い機能でもはや使われることはありませんが、mikutterは機能の廃止には慎重なので未だに残っています(後述)。古い機能ですが、これもPostboxの使い方の教材としては未だに現役です。このコマンドで目新しいのは、先ほど触れたfooter:が実際に使われていることと、to_display_only:オプションです。Replyをmikutterから入力するとき、Postboxの下に宛先のTweetが表示されますね。これはto:で指定されたMessageが表示されます。to:には2つの機能があることになってしまっているわけです。多くの場合問題ではないのですが、非公式リツイートはReplyにしたくないケースもあるのです。いう時にはto_display_only:にtrueを指定すると、to:が表示のためだけに使われ、誰にも宛てられていないTweetを投稿できます。オプション引数の名前がかっこ悪いのは、乱用すべきでないからです。宛先として表示されているTweetがあるのに、投稿すると実際には宛先がないのですから、ユーザを混乱させる可能性があります。Tweet3.3から実装された、俗に言う「コメント付きリツイート」ですね。Tweetに関することを担当しています。サードパーティプラグインだったものが取り込まれたものですが、このプラグインの30行目あたりにあるquoted_tweetコマンドは、取り込まれるにあたって追加されたものです。Postboxに大幅な変更が入ったことで、最初からURLを入力した状態のPostboxを出現させることが出来ます。ReTweetを見てきたみなさんにとっては、これの実装から今更学ぶことはありません。footerが非公式リツイート形式からURLに変わっただけです。いえば先ほど慎重に使えと書いたto_display_onlyがここでも使われています。これはReplyにしたくはないが、下には宛先を表示しておきたいというケースの好例です。Postboxをとりまく歴史Postboxは最初からあるので、今まで数々の環境の変化を乗り越えてきたファイルのひとつでもあります。今回のようなAPIの改修が行われた経緯と、古いAPIが構築されてきた経緯を簡単に書いておきます。非公式ReTweetの終焉Twitterが「ReTweet」を実装したのはさすがにもう随分前ですが、ReTweetが実装された理由は、皆がつぶやきを共有し始めたからです。元のTweet」みたいなTweetでReTweetを表現してました。「非公式リツイート」は衰退しましたが、ReTweetという基本的な機能はPostboxの中に組み込まれており、mikutterはできるだけ従来の機能を削除することはしないので、この機能は残り続けます。悪いことに、ReTweetはユーザが勝手にやっていた頃からこの名前だったため、Postboxには例えばretweetというオプションがありました。ここまで読んでいただいた皆さんはこれの意味を「非公式リツイートかどうかを判別する」ためだということが分かるでしょうが、経緯を知らなければ「なんでリツイートがこんなところに...?」と困惑することになるでしょう。あと、なんでPostboxがそんなことを知らなければならないのだ、という疑問も湧いてきます。実はheader:とfooter:は、3.3から実装されたオプションです。今まではどうやってテキストを挿入した状態のPostboxを作っていたのかというと、それはできませんでした。ReTweetのfooterをつけるといったことを、Postboxが担当していたのです。Tweetを実装するにあたって、新たにquoted:みたいなオプションも考えましたが、そんなことをしていては今後Poll機能(アンケート機能)などが実装されていくとキリがなくなってきます。ネタツイート系のプラグインから、いきなり投稿するのではなく、Postboxを一度表示して、ユーザに編集や確認をさせたいという要望もありました。プラグイン毎に異なる目的があるなら、従来の「目的を聞くAPI」には限界があります。いうわけで、今回からは以上のようなAPIに刷新したわけです。今後(できないこと)Postboxの内容を動的に変えることがまだ(素直な方法では)できません。みんなやってるし別にいいかなとも思うのですが、抽象的な方法を用意しておくと、例えばgtk3とかに移行するなど、非互換な変更が入った時に、mikutter側で差異を吸収して引き続き使える可能性があるので良さそうです。まとめPostboxを使ってみました。今回の知識を使って、nominateというプラグインを作りました。ここまで読んだ人はこれから学ぶことは何もないと思いますが、必要な部分だけが切りだされているので、改造するには良いと思います。3.3をリリースします。6周年おめでとうございます。1年ぶりのマイナーアップデートです。文字数カウントの方法を変更。ユーザの登録をコマンドライン上から行えるお知らせ機能。mikutterサーバからステータスバーにメッセージが配信される他のシステムメッセージがあれば、表示されませんOSCやコミックマーケットなどの参加情報などを表示します。謎グッズをゲットだステータスバークリックしたらブラウザが開くとかどう考えてもあたまがおかしいのでリンクはありません。ください設定で非表示にできます画像サービスのサポートの強化d250g2.comyfrogのサポートを復活(ルータケーキのみ)詳しことは、以下の記事を参照してください。これといったバグ報告なども上がってきてません。今回はもうある程度使われているので、今更という感じですね。3.3をリリースしてしまおうと思っています。主な機能は以下の記事を参照してください。http://mikutter.blogspot.jp/2015/10/mikutter-33-features.htmlまだ本ベータ(?)じゃないので気をつけてください。一応、ユーザデータなどのバックアップをしたほうが良いと思います。Redmineには楽しい仲間がいっぱいいっぱい!http://dev.mikutter.hachune.net/versions/11バグ報告は集中すると思うので、Twitterではなく、Redmineにお願いします。3.2.12mikutterの偽りの姿がクラッシュする普通に使っていただいているユーザには問題ないですが、実績をあまりアンロックしていない人が起動するとあら不思議クラッシュしてしまうではありませんか。やばいと思ったのでリリースを抑えきれなかった。