+++ date = "2023-07-25" tags = ["bluesky"] title = "boothで初の技術書を出してみた" slug = "bluesky" +++ この前、booth経由で[技術書](https://syui.fanbox.cc/shop)を出してみました。 blueskyの人達が暖かく迎え入れてくれたので、嬉しかった。 boothを使うのも本を出すのも何かを売るのも初めてだったので、まだまだわからないことだらけ。 本は数時間で完売。とてもありがたかった。 なお、在庫の補充は今後もないと思う。 今回はその経緯をブログにしてみる。 ### 色々な仕組み 本書は、自分が「これならお金を出してもいいかな」と思えるような本を目標に作りました。 例えば、本を買った人にカードが付いてくるなら、少しは買いたくなりますよね。 私もカードが付いてくる本は欲しくなったりします。 ただ、本を買っても読まずカード目当て、というのも、ちょっと寂しいですよね。 そこで、ここにも新しい仕掛けが必要だと考えました。 本書を買ってくれる人は、現在、blueskyのカードゲームをやっている人が多いです。 そして、その中にはプログラミングをやってみたいなと思ってる人が少なからずいました。 私もそういう人達の力になりたかったし、なにかできないかなあと考えていました。 そこで、手順通りに進めてプログラムを作ると、タマゴのカードを育成、孵化できるような仕組みを考えました。 ただし、これらの仕組みは、本を買った人だけが楽しめるようなものであってはならない。 本を買ってない人でも楽しめるような仕組みを目指して作りました。 あくまでタマゴ育成は、おまけであり、新しく追加されたタマゴ育成の説明やヒントが書かれているだけのもの、という位置づけです。 実は、これを本書の購入者に限定することは簡単にできます。 例えば、下記のようにやればいい。 ```sh if [ "$book_user" = false ];then echo no book user exit fi ``` ですが、そのようなことはやっていませんし、やるつもりもない。 本を買ってない人は楽しめない、そんな仕組みは作らない。 なぜか。 なぜなら、気分が乗らないから。 私は自分がやりたくないことはできない、そのようなものなのです。 やりたいことをやるだけ。 しかし、投稿をコピーすることで簡単に実行できてしまうようなものでも面白さが半減してしまうと思いました。 ですから、購入してくれた人も、購入していない人も、納得できるような仕組み作りを目指しました。 今回は、投稿をコピーしても実行されないようなシンプルな仕組みを作りました。 本書はblueskyユーザーに向けたプログラミング入門であり、少しでもプログラミングを楽しく学んでもらえたらいいなと思って作ったものです。 楽しく学ぶ仕掛けとして、カードを使っているに過ぎません。 最も重要なのは、本書を購入してくれた人が満足してくれること、楽しんでくれることです。 カードを付属したのも、タマゴ育成の仕組みも、そのために作りました。 その結果、「これならお金を出してもいいかな」と思えるような本になった気がします。 ### 具体的にやったこと 制作過程というか、やったことを書いてみます。 - 表紙の絵を描いた - 新しいカードをいくつか作った - カードの所有者一覧のレイアウトを作ったり、新しいバッジが追加されるようにした - apiを作ってdeployした - botに隠しコマンドを作ってタマゴのカードがドロップするようにした - botに新しいコマンドを作ってタマゴを孵化する仕組みを考えて作った - カードのページに本やリンクを追加するプログラムを作って、レイアウトを整えた - rustで読者向けのプログラムを作ってテストした - 本をgitbookで構成して文章を書いた - 注文を受け付ける前に発送するカードをランダム、かつ検証できるようにした - ランダムの結果を暗号化して公開鍵を公開し、完売した段階で秘密鍵を公開して、データを復号化できる仕組みを作った - 本をwebとpdfでbuild, deployした - boothとfanboxを連携して本を出品した - blueskyで告知した - 本が完売した - 申請があった人のページに本カードとリンクを追加した - リアルカードを作った - リアルカードを発送した - 本の内容で指摘があったところを修正した - リアルカードが届いたことを確認できた人をカードの所有者一覧に追加した ### twitterで告知したら本は売れたか twitterで同じことをしても、おそらく、一つも売れなかったと思う。 この結果は、フォロワーがどれだけいても、例えば、1万人いても結果は変わらなかったと思う。 これはtwitterにいる人達が問題ではなく、その場の雰囲気とかもあると思う。 今のblueskyにはアクティブな人が潜在的に集まっていて、本を買ってくれて、最後までやってくれた人が多かった。 たまたまそういう人が多かったので、その結果だと思ってる。 私が出した本は、入門と言ってるけど、そこまで初心者向きでもなく、簡単に言うと`rust`で特殊なプログラムを作ることをやっていく感じのものになっている。 rustは難しいと言われている言語。基本的には、そんな簡単じゃないし、プログラムやコードを初めて書くような人がいきなり触りだす言語でもなかったりする。 今回、プログラムを普段やらない人も本書を次々とクリアされ、コマンドからai-botに特殊な投稿を送信できていたので、正直、それが一番嬉しかった。 また、応用的にプログラムを改造する人も見かけて、これも嬉しかった。 技術書や専門書って、最後までやってくれる人はあまり多くないと思う。 でも、投稿を見る限りでは、すごく多くの人が読んでくれて、試してくれて、そして、最後まで進めてくれた。 すごい。 blueskyの人たちに感謝。 ### タマゴ育成とは タマゴ育成、あるいは孵化と私は呼んでいます。 基本的には、`/egg`を使って孵化を目指すわけですが、対戦相手とcpが同一かあるいは上回った場合に孵化するようになっています。 しかし、タマゴのcpは0。これでは孵化に時間がかかってしまいます。なぜなら、相手のcpが0のときしか孵化しないから。 ですから、[/fav](https://card.syui.ai/pr)の仕組みを使って、タマゴ育成を目指すのは良い方法です。 今のところ、二種類のカードのどちらかが孵化するようになっています。 ### gitbook gitbookはもうかなり古くなっていて、vueのテンプレートを使ったほうが見栄えはいいかもしれない。ただ、gitbookはpluginが便利で、それに相当する機能をvueで補うのもめんどくさそう。 https://gitbook-ng.github.io/setup.html ```sh $ npm install @gitbook-ng/gitbook $ npx gitbook serve $ npx gitbook build ```