give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

Rubyプログラマが勢いで仕事用のMacをBig Surにアップグレードしてみた

↑昨日こんなツイートをしてみたんですが、なぜか「さっさとBig Surに上げてしまいたい!」という欲求が勝ってしまい、勢いでBig Surにアップグレードしてみました。

f:id:JunichiIto:20201129071239p:plain

自分が人柱になってみたので、人柱情報を書いてみます。

ちなみに、結論から先に書くと、今のところBig Surにアップグレードしたことによる致命的な問題はありません。(注:アップグレードして3時間後の感想です)

事前の情報収集

Big Surに上げたい!といっても、何も考え無しにアップグレードしたわけではありません。
いちおう、情報収集はしておきました。

  • 会社の同僚が一人Big Surにアップグレードしていたので、彼の情報から致命的な問題はないことを確認。(ただし、彼の場合はクリーンインストールでBig Surに移行した)
  • 1週間ほど前に自宅用のMacをBig Surにアップグレードして、日常的なwebブラウジング等では特に大きな問題が起きないことを確認済み
  • 「よく使うアプリ名 + Big Sur」といったキーワードで、Big Sur関連のサポート情報やトラブル情報を検索 → リリース直後はいくつかトラブルがあったようだが、それも解決してるっぽい

上記のような情報収集の結果、総じて「何か致命的な問題が起きることはなさそう」と判断しました。

アップグレード前の準備

アップグレード前に以下のような準備をしました。

  • VirtualBoxを最新版にアップデート(バージョンが古いとBig Surで動かないという情報を見つけたため)
  • TimeMachineで最新のバックアップを取る
  • 一部のファイル群を外付けハーディスクに移動して、SSDの空き容量を100GB以上増やす

SSDの空き容量を増やしたのは以前Catalinaにアップグレードする際に以下のようなトラブルに遭遇したからです。

blog.jnito.com

アップグレード実施

以下のような手順でアップグレードを実施しました。(クリーンインストールではなく、データを保持したままのアップグレードです)

  • 昨日の晩、10時頃にアップグレードを開始して就寝(インストーラのダウンロードが始まる)
  • 今朝の午前3時頃、インストーラを実行(で、また寝た)
  • 今朝の午前4時半頃、インストールが完了していることを確認

すぐに動いたアプリ一覧

以下のアプリは特に問題なく起動しました。

  • Evernote
  • Excel/Word/Powerpoint(Version 16系なのでちょっと古いかも)
  • Quiver
  • RubyMine
  • やるぞ!青色申告
  • CotEditor
  • Karabiner Elements
  • Zoom(最新版にしないとCPU使用率が上がるので注意)
  • ATOK
  • Kindle
  • Krisp
  • Docker
  • Spotify
  • RubyMine
  • Railsの開発用サーバー(puma-dev)
  • RSpecの実行
  • PostgreSQL
  • git
  • Slack
  • MS Teams
  • Skype
  • Homebrew
  • Recordit
  • OmniDiskSweeper

あと、USB接続しているHappy Hacking Keyboard(HHKB)もちゃんと動いています。

PFU HHKB Professional2 Type-S 英語配列/白 PD-KB400WS

PFU HHKB Professional2 Type-S 英語配列/白 PD-KB400WS

  • 発売日: 2011/06/15
  • メディア: Personal Computers

最初はトラブったがなんとか起動したアプリ

MacVim

僕は普段macvim-kaoriyaをターミナルではなく、GUIアプリとして使っているのですが、BigSurでは画面が真っ黒になって使い物にならなくなりました。(真っ黒な画面と正常な画面を点滅するように切り替わったりするような動きもしていた)

f:id:JunichiIto:20201129081439g:plain

.vimrcや.gvimrcを削除して完全ノーマル状態で起動しようとしても現象は変わらず。
GitHubのissueも見ましたが、該当するようなissueは見当たらず、というか、「最近あまり活発にメンテされてない?」という印象。
(ちなみにターミナルから起動するVimは普通に動いていました)

というわけで、macvim-kaoriyaではなく、本家MacVimをインストールすることに。
GitHub issueにBig Sur関連のトラブル報告もあったので「大丈夫かな?」と思ったけど、無事に起動しました。

f:id:JunichiIto:20201129082733p:plain:w350

kaoriya版とどれくらいの違いがあるのかはあまりちゃんとわかってないのですが、とりあえず本家MacVimでも普通に使えそうな印象です。

VirtualBox

「Big Surに対応するために」と、事前に最新版にアップデートしていたのですが、Windows 10の仮想マシンを起動しようとしたら、以下のようなエラーが出ました。

Failed to open a session for the virtual machine win-10.

The virtual machine 'win-10' has terminated unexpectedly during startup with exit code 1 (0x1).

Result Code: NS_ERROR_FAILURE (0x80004005)
Component: MachineWrap
Interface: IMachine {85632c68-b5bb-4316-a900-5eb28d3413df}

エラーメッセージでググるといくつか情報が見つかるのですが、それを試しても効果無し。
いろいろ情報を探しまくった結果、最終的には以下のページの情報が解決策になりました。

virtualbox.org • View topic - NS_ERROR_FAILURE (0x80004005) on Mac VirtualBox

どうやらMacのSIPという設定を有効化(enabled)にする必要があるみたいです。
僕のMacの設定を見ると一部が無効化(disabled)になっていました。(無効化した記憶がないのになぜ??)
で、以下のページを参考にしてSIPを有効化すると無事にVirtualBoxのWindows 10が起動しました。

OS X 10.11 El Capitanのシステム保護機能「Rootless」を無効にするcsrutilコマンドの使い方。 | AAPL Ch.

一段落したあとにやったこと

万一Macが起動しなくなったときにそなえて、起動用USBメモリを作成しました。
ちなみにUSBメモリは16GB以上の容量が必要です。(8GBだと容量不足で入りません)

macOS の起動可能なインストーラを作成する方法 - Apple サポート

まとめ

MacVimとVirtualBoxが起動しなくなったときは「うわ、ヤバい」と思いましたが、なんとか無事に解決できました。
というわけで、今のところBig Surで致命的な問題は発生していません。(繰り返しますが、アップグレードして3時間後の感想です)

もし新たな問題に遭遇したときはこの記事にまた追記していきます!

(独り言)今使ってるMacBook Proはデュアルコアなんだけど、「もっとコア数が欲しい」と思うことが増えてきたので、M1チップのMacBook Proにも移行したい・・・。

おまけ

あの「ジャーーン」音、単純にMacらしい体験ができるだけじゃなくて、Safeブート起動時にキーボードを押さえるタイミングを把握したり、Macが生きてるか死んでるかを確認したりするのにとても有用なんですよね〜。

いろいろ追記

Big Surを使い始めて困った点と解決策をまとめていきます。

libv8がインストールできない問題

とあるプロジェクトでbundle installしようとすると以下のようなエラーが発生しました。

Installing libv8 3.16.14.19 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/ext/libv8
/Users/jnito/.rbenv/versions/2.7.2/bin/ruby -I /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/2.7.0 -r ./siteconf20201129-8361-165txge.rb extconf.rb
creating Makefile
Applying /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/patches/disable-building-tests.patch
Applying /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/patches/disable-werror-on-osx.patch
Applying /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/patches/disable-xcode-debugging.patch
Applying /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/patches/do-not-imply-vfp3-and-armv7.patch
Applying /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/patches/do-not-use-MAP_NORESERVE-on-freebsd.patch
Applying /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/patches/do-not-use-vfp2.patch
Applying /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/patches/fPIC-for-static.patch
Compiling v8 for x64
Using python 2.7.16
Using compiler: c++ (clang version 12.0.0)
Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
Beginning compilation. This will take some time.
Building v8 with env CXX=c++ LINK=c++  /usr/bin/make x64.release ARFLAGS.target=crs werror=no
GYP_GENERATORS=make \
	build/gyp/gyp --generator-output="out" build/all.gyp \
	              -Ibuild/standalone.gypi --depth=. \
	              -Dv8_target_arch=x64 \
	              -S.x64  -Dv8_enable_backtrace=1 -Dv8_can_use_vfp2_instructions=true -Darm_fpu=vfpv2 -Dv8_can_use_vfp3_instructions=true -Darm_fpu=vfpv3 -Dwerror=''
  CXX(target) /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/vendor/v8/out/x64.release/obj.target/preparser_lib/src/allocation.o
clang: warning: include path for libstdc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead [-Wstdlibcxx-not-found]
In file included from ../src/allocation.cc:33:
../src/utils.h:33:10: fatal error: 'climits' file not found
#include <climits>
         ^~~~~~~~~
1 error generated.
make[1]: *** [/Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/vendor/v8/out/x64.release/obj.target/preparser_lib/src/allocation.o] Error 1
make: *** [x64.release] Error 2
/Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/ext/libv8/location.rb:36:in `block in verify_installation!': libv8 did not install properly, expected binary v8 archive
'/Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/vendor/v8/out/x64.release/obj.target/tools/gyp/libv8_base.a'to exist, but it was not found (Libv8::Location::Vendor::ArchiveNotFound)
	from /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/ext/libv8/location.rb:35:in `each'
	from /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/ext/libv8/location.rb:35:in `verify_installation!'
	from /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19/ext/libv8/location.rb:26:in `install!'
	from extconf.rb:7:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/libv8-3.16.14.19 for inspection.
Results logged to /Users/jnito/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/extensions/x86_64-darwin-19/2.7.0/libv8-3.16.14.19/gem_make.out

An error occurred while installing libv8 (3.16.14.19), and Bundler cannot continue.
Make sure that `gem install libv8 -v '3.16.14.19' --source 'http://rubygems.org/'` succeeds before bundling.

In Gemfile:
  therubyracer was resolved to 0.12.3, which depends on
    libv8

こちらのissueに「このシェルスクリプトを使え」という参考情報が載っていますが、僕が使っているlibv8は3.16.14.19 というかなり古いgemなのでこのスクリプトが使えませんでした。
いろいろ探した結果、こちらのページに載っていた以下のインストール手順が役に立ちました。

$ brew install v8@3.15
$ bundle config build.libv8 --with-system-v8
$ bundle config build.therubyracer --with-v8-dir=$(brew --prefix v8@3.15)
$ bundle install
Bug Surでお仕事したけどトラブル無し

Big Surで初めて仕事に挑みましたが、コードを書いたりビデオ会議をしたりする上で特にトラブルは発生しませんでした😄

月〜水と3日間仕事で使ったけどトラブル無し

3日間仕事でバリバリ使いましたが、特にトラブルは起きませんでした。
僕の開発環境においては、ふつうに使えると言っても大丈夫そうです ✌️

チェリー本発売3周年記念!? 技術書の商業出版と同人誌、どっちが儲かるの問題について

はじめに

3年前の今日、2017年11月25日に僕が執筆したRubyの入門書「プロを目指す人のためのRuby入門」(通称チェリー本)が発売されました。
つまり、今日でチェリー本が発売されて3年になります!(拍手〜!👏👏👏)

ありがたいことにチェリー本は自分でも予想できなかったぐらい、たくさんの人に読んでもらえました。
すでに増刷も4回行われています。購入してくださったみなさん、本当にありがとうございます!😆

概して技術書は賞味期限が短く、3年も経つと内容が古くなって使い物にならなくなることもよくあります。
ですが、チェリー本はRubyの本質的な部分にフォーカスしているので、大半の内容は2020年現在でも有効です。
もちろん、一部は執筆当時と仕様が変わってしまった部分もありますが、そういった差異についてはネット記事でフォローしています。

今年の12月25日にリリースされるRuby 3.0についても、同じように本書との差異を解説する予定ですので、これから読もうと思っている方も安心して購入してください!

f:id:JunichiIto:20201125074548j:plain

本題:技術書の商業出版と同人誌、どっちが儲かるの問題 について

さてさて、発売3周年を記念して、何かチェリー本に関する話題をブログに書いてみようかな〜と思ったのですが、差し障りのない話よりも、ちょっと刺激的な話題の方が面白いかな?と思って、今回はお金にまつわる話を書いてみようと思います。
テーマはずばり「技術書の商業出版と同人誌、どっちが儲かるの問題について」です!

前述の通り、僕は技術評論社から「プロを目指す人のためのRuby入門」という技術書を商業出版しました。
一方、僕は「Everyday Rails - RSpecによるRailsテスト入門」という電子書籍も翻訳して販売しています。

leanpub.com

こちらはLeanpubという海外の自費出版サイトでしか購入できない電子書籍です。
本屋さんやAmazonでは購入できないので、商業出版ではありません。
この本を「同人誌」と呼ぶのは自分でも少し違和感がありますが、「商業出版ではない電子書籍オンリーの自費出版本」という販売形態は、いわゆる「同人誌」とあまり変わらないと思うので、ここでは同人誌扱いとさせてください。

というわけで、僕は商業出版と同人誌を1冊ずつ出版したことになります。
では、どちらの方が儲かっているのでしょうか?

今回はそれを大公開!!・・・したいのですが、公表できる数字とできない数字があるので、具体的な金額は言えません。(ごめんなさい)
その代わりに可能な範囲でそれぞれの情報を書いてみようと思います。

数字で見るチェリー本とEveryday Railsの比較

「プロを目指す人のためのRuby入門」(商業出版)

発売日
2017年11月25日
販売価格
2980円 + 税
印税率
具体的には書けませんが、ネットでよく見かける印税率と大差ありません
販売部数
具体的には書けませんが、「技術書としては大ヒット」と呼んでいいぐらいの販売部数はあるようです

「Everyday Rails - RSpecによるRailsテスト入門」(同人誌)

発売日(日本語版の発売日)
2014年2月7日
販売価格
19ドル=約1980円以上(Leanpubでは購入者が購入価格を自由に上乗せできます)
印税率
販売価格の80% (ただし、原著者と翻訳者の配分率は非公開)
販売部数
4860部(2020年11月25日現在。部数は読者数として販売サイトに表示されている)

はい、参考になるような、ならないような、どっちかというと参考にならない数字かもしれませんね(苦笑)。

単純な話、収入を計算する上で重要なパラメータは印税率と販売部数です。
なぜなら販売価格 x 印税率 x 販売部数で僕の懐に入ってくる金額は決まるからです。
とはいえ、どっちもボカしてあるので正確な数字は僕にしかわかりません🤣

印税率の高いEveryday Rails vs 販売部数の多いチェリー本

印税率だけにフォーカスして両者を比較すると、Everyday Railsの方がずっと印税率は良いです。
「原著者と翻訳者の配分率は非公開」としていますが、僕が得られる正味の印税率を見ても、チェリー本よりも印税率は上です。
そのため、1冊あたりの収入額はEveryday Railsの方がチェリー本よりも多くなります。

その一方で販売部数も重要なパラメータになります。
Everyday Railsとチェリー本、どっちの方がたくさん売れてるのかというと、これはチェリー本の方です。
Everyday Railsは発売から6年以上経っていますが、販売部数だけでいうと、チェリー本の方があっという間にEveryday Railsの販売部数を抜き去りました。
ですので、印税率が低いからといって、「同人誌の方が商業出版よりも儲かる」とは言い切れないところがミソです。

で、結局どっちが儲かるの?

僕もここでいいかげんなことは書けないので、過去の伝票を引っ張り出して双方の収入額を合算してみました。
販売期間が異なるので、なるべく条件を揃えるために、ここでは以下の計算式で「1年あたりの平均収入額」を比較してみることにします。

これまでの総収入額 ÷ 販売年数 (Everyday Railsは6年、チェリー本は3年)

この計算式で比較してみると、1年あたりの平均収入額が多かったのは・・・「プロを目指す人のためのRuby入門」の方でした!!
そうなんです。僕の場合、同人誌よりも商業出版の方が儲かってるんです。
比率で言うと、チェリー本の方が1.6倍程度平均収入額が多かったです。

ちなみに「これまでの総収入額」だけで比較すると、Everyday Railsの方が上になります。
ただし、チェリー本との差は1.2倍程度です。
また、Everyday Railsは毎月売上が報告されますが、チェリー本は半年に1回です。
もしかすると、チェリー本の次回の売上報告が出たら、総収入額もチェリー本がEveryday Railsを上回るかもしれません。

なお、具体的な額は書けませんが、Everyday Railsの総収入額とチェリー本の総収入額を合算したら、軽く1千万円を超えていた、とだけ書いておきます。

商業出版のいいところ

他にも、同人誌と商業出版をどちらも体験した人間としては、商業出版には以下のようなメリットがあるな〜と感じています。

  • 書店の本棚に並んだり、Amazonでリコメンドされたりする宣伝効果はめちゃくちゃ大きい(なので、よく売れる)
  • 「もっと印税率が高ければ」と考えることはよくあるが、自分で在庫を抱えなくてよい、全国の書店に本を置いてもらえる、自分で本を発送したりする手間もない、大コケしても借金を抱えるリスクはない、といった利点を考えると、「まあそんなもんかなー」とも思う(売上全額あげる代わりに全部1人でやれと言われたらとても無理)
  • 「( Everyday Railsではなく)チェリー本を読んで伊藤さんを知りました」という声の方が圧倒的に多いので、僕自身の知名度アップにもかなり貢献してそう

あくまで「うまく波に乗れば(よく売れれば)」という条件付きにはなると思いますが、僕個人としては「商業出版も悪くないな。むしろよい経験ができたな」と感じています。

まとめ

というわけで今回は「プロを目指す人のためのRuby入門」の発売3周年を記念して、「技術書の商業出版と同人誌、どっちが儲かるの問題」を語ってみました。

チェリー本を出版するまでは正直言って「印税率も低いし、たぶんEveryday Railsの方が儲かるんだろうな」と思ってたんですが、蓋を開けてみるとビックリ、チェリー本が印税率の少なさを帳消しにする勢いで売れてくれました。
なので、今は「商業出版、意外と儲かるやん!」という気持ちです。

とはいえ、これはあくまで僕個人の一事例に過ぎません。
n = 1で一般化できるとは僕も考えていないので、あくまで参考情報として考えてください。

ただ、世の中的には「商業出版は儲からない。同人誌の方が儲かる」という言説を見かけることの方が多い気がします。
ですが、うまく波に乗れば、商業出版でも十分いい収入を得られるケースがある、ということを多くの人に知ってもらえたら嬉しいです😄

PR:チェリー本とEveryday Rails、どちらも好評発売中です!!

これからRubyを学びたい人や、RSpecを使ってRailsのテストコードを書けるようになりたい人は、ぜひチェリー本とEveryday Railsを手に取ってみてください。
内容については著者・翻訳者である僕が、自信をもってお勧めします!

今後もチェリー本とEveryday Railsをよろしくお願いします😆

leanpub.com

プロフィール写真を変えました in 2020

お知らせ

約2年ぶりにプロフィール写真を変更しました。
できれば毎年更新したいと思ってるんですが、「そろそろ変えなきゃ」と思い続けて2年が経ってました😓
というわけで、新しいプロフィール写真はこちらです。

f:id:JunichiIto:20201123113214j:plain:w300

これまで使っていた写真はこれでした。

f:id:JunichiIto:20181109065650j:plain:w300

なぜかちょっとだけ右に寄ってます。あと髪も伸びましたね。

写真を撮った場所は自宅に近い播磨中央公園というところです。
過去に映画でも使われたことのある並木道で撮ってみました。カメラマンは妻です。

めちゃめちゃ「秋限定カラー」みたいな写真で、春や夏だとどんなふうに見えるのかわからないけど、とりあえずこれにしてみます。
あれこれ贅沢を言うと、いつまでたっても変えられなくなっちゃうので。

アイコンが変わってしばらくは見慣れないかもしれませんが、みなさんよろしくお願いします〜!

あわせて読みたい

2年前にプロフィール写真を変えた際のブログ記事です。

blog.jnito.com