akiyoko blog

akiyoko の IT技術系ブログです

無料版 PyCharm で Django 開発環境を構築するまでの手順(「現場で使える 基礎 Django」本の補講その2)

akiyoko です。
この記事では、私が執筆した Django の同人誌「現場で使える 基礎 Django」で説明しきれなかった部分の加筆・補足をしています。まだ本を読んでいない方にも読める記事になっていますので、ご安心を。

補講その2として今回は、「無料版 PyCharm で Django 開発環境を構築するまでの手順」 について取り上げます。


記事の前半で「PyCharm」の概要や利点、「Professional 版」と「Community 版」(「CE」と略されます)のエディションの違い、Professinal 版のライセンスと料金体系を説明し、後半で無料版の「PyCharm CE」を使って Django の開発環境を構築するまでの手順を解説します。


同人誌を購入済みの方のために補足すると、技術書典4 で頒布したバージョン(v1.0.0)の「付録A:macOS の Python 3 環境構築の方法」や 6月以降に再販したバージョン(v1.0.1)の「付録A:macOS における Django 開発環境の構築手順」とは若干手順が異なっていますので、すでにお読みの方はご注意ください。改訂箇所は以下の通りです。

  • (使う必然性がなかったので)Anaconda を使わないように改訂(v1.0.1)
  • 初心者でも簡単に環境構築できるように PyCharm CE を使うやり方に改訂(v1.0.1)
  • 説明を簡便にするために、Python をインストールするまでの手順を省略(本記事)
  • インストールする Python のバージョンを 3.5.2 → 3.6.5 に変更(本記事)

本ブログ記事では長々と書いていますが、同人誌ではスッキリと書いていますのでご安心ください。



《CMコーナー》
「現場で使える 基礎 Django」は現在、増刷して絶賛発売中です!
booth.pm





PyCharm とは

PyCharm」は「統合開発環境」(IDE)と呼ばれる開発ツールで、Python で開発をする際にいろいろと便利な機能を利用することができます。 仕事の現場でメモ帳を使って開発するとあまりにも非効率なので、このようなツールが一般的に使われています。

JetBrains 社の IDE では Java 向けの「IntelliJ IDEA」や、PHP 向けの「PhpStorm」が有名ですが、Python 向けの IDE が「PyCharm」という位置付けになっています。私は、Python 開発にはもっぱらこの「PyCharm」を愛用しています。

メリットとデメリット

私が Python の開発に PyCharm を使う理由は、以下の点が気に入っているからです。

  • コードジャンプ機能と自動整形機能を使うことで開発効率が著しく向上する
  • インストールしたそのままの状態で快適に使える

その他にも以下のようなメリットがあり、Python があまり得意でない方にも便利に使うことができるのも魅力です。

  • venv」(仮想環境を作成するためのモジュール)や「pip」(パッケージ管理ツール)のコマンドの使い方が分からなくても、PyCharm の画面からポチポチと操作できる
  • Windows 版も Mac 版もだいたい同じ操作性や見た目になるのでナレッジが共有しやすい

現時点でのデメリットとしては、例えば以下のものが挙げられるかと思います。

  • 一部機能が有料の Professional 版でないと使えない(後述します)
  • 現時点で Pipenv に未対応 *1
  • conda を使っている場合に PyCharm の画面からパッケージがインストールできない不具合がある(?)


PyCharm 関連でよく話題に上がるのが、エディションとライセンス、そして料金体系です。

エディション(Professional 版と Community 版の違い)

PyCharm には有料の「Professional」版と無料の「Community」版(CE)とがあり、Community 版では一部機能が使えないといった制限があります。
機能の比較表が以下になります。 *2

f:id:akiyoko:20180616115941p:plain
Features - PyCharm より引用)


この中で私が考える Professional 版のメリットはズバリ、以下の三点です。

  • ファイルの同期とリモートデバッグ(Remote development capabilities)
  • データベースのサポート(Database & SQL support)
  • Django などの各種フレームワークのサポート(Python web frameworks)


まず、「ファイルの同期とリモートデバッグ」は、私が Professonal 版を選んでいる一番大きな理由です。ファイルの同期とはその名の通り、Vagrant や AWS の外部サーバに SFTP 等で自動的にファイルを同期してくれる機能で、実サーバで動作検証する際に非常に便利に使うことができます。リモートデバッグとは、サーバで動作させている Django のプロセスをブレークポイントで止めて IDE 内でステップ実行できる便利機能です。pdb を使ってコンソールでデバッガを使うのと比較して、見慣れた環境でデバッグできるのため効率が劇的に上がります。

二点目の「データベースサポート」は、IDE 内でデータベースのレコードを表形式で表示したり、表のセルを更新することでレコードを直感的に変更できたりと、データベースの操作を IDE 内で統合的に使えるようにしてくれる機能です。
f:id:akiyoko:20180616163255p:plain
SQLite については良さげなクライアントツールがないので個人的にこの機能は重宝していますが、例えば MySQL であれば Sequel Pro、PostgreSQL であれば「PSequel」などのクラアンとツールがあれば特に必要ないとは思います。あと、ER図の作成機能があるので、プロジェクトによってはニーズはあると思います。

akiyoko.hatenablog.jp


最後の「Django などの各種フレームワークのサポート」ですが、例えば Django の場合であれば、テンプレートエンジンに合わせたシンタックスのハイライトや、ファイルに合わせたコード補完をサポートしてくれます。これらの機能はあればもちろん便利なのですが、私の感覚では必要不可欠とまでは言えないように感じています。詳しい情報は「Web Development and Django Support - Features | PyCharm」を参考にしてください。


ちなみに後述する通り、 学生は無料で Professional が使える ので、問答無用で Professional 版を利用すればよいと思います。


ライセンスと料金体系

以降で、Professional 版のライセンスについて説明します。

2017年以降はそれまであった「永久ライセンス」は無くなり、「サブスクリプションライセンス」方式になりました。PyCharm のサブスクリプションは、継続年数によって値段が異なるので少しややこしいです。また、基本は年払いですが、初年度に限り月払い(継続課金)も可能です。 *3

ライセンスは、PC1台ごとではなく、ユーザー1人ごとの料金になっています。ライセンスが1つあれば複数マシンで(別のOSでも可)利用できる のは嬉しい限りです。ただし、同一のユーザーが使うという前提でなければいけません。 *4


次に、コマーシャルライセンスとパーソナルライセンスの違いについて説明します。両者に機能的な差はありません。目的(開発するものが企業の製品・サービスなのか否か)によって、そのライセンスが異なります。パーソナルライセンスは、個人用に使うため(企業ではなく自分のお金で自分のために使う)のものですが、商用サービスの開発にも使えるとのことです。 *5 企業の業務内で利用する場合はコマーシャルライセンスを使いましょう、とのこと。 *6


そして気になる料金体系はこちら。
正確な値段については、公式サイトを適宜ご確認ください。


【パーソナル(個人)ライセンス】 *7

継続年数 料金(年額)
1年目 89.00 USドル /年
2年目 71.00 USドル /年
3年目以降 53.00 USドル /年


【コマーシャル(企業)ライセンス】 *8

継続年数 料金(年額)
1年目 199.00 USドル /年
2年目 159.00 USドル /年
3年目以降 119.00 USドル /年


また、大学のメールアドレスなど何らかの証明が必要となりますが、学生であれば無料で Professional 版が利用できます(PyCharm だけでなく JetBrains 社の全製品が無料になります)。 *9

私は個人的に有料の Professional版を利用していますが、以降で説明する内容は無料の Community 版でも問題なく動作させることができますのでご安心ください。



Django 開発環境を PyCharm CE で構築するまでの手順

手順の解説

今回の手順について、全体像となぜそのようにするのかを Q&A形式で説明します。

まず、全体像はこちらになります。

f:id:akiyoko:20180617162502p:plain


1.Python 3 をインストール

Q.Python 3 のバージョンは何を選べばよい?
A.3.6 系の最新安定版(執筆時点の最新版は「3.6.5」)を選ぶのがよいです。しかしながら 3.5 系でも Django を使う上では特に問題ないと思います。バージョン 3.6 と 3.5 の違いについては以下を参考にしてください。


(参考)

Q.Python 3 はどうやってインストールすればよい?
A.Python 公式サイト からダウンロードしてインストールするのが一番簡単です。macOS の場合は、Python のバージョンが簡単に切り替えられるように Pyenv というツールを使ってインストールすることをオススメしますが、やや手順が面倒になります。同人誌の付録では Pyenv を使ってインストールする手順についても説明しています。

Q.venv とは?
A.仮想環境作成モジュールです。Python 3.3 以降では「venv」が標準で付属しており、Python 3.5 以降は仮想環境を作成するのに(「virtualenv」や「pyvenv」ではなく)「venv」が推奨されています。 *10

Q.pip とは?
A.Django などの Python パッケージをインストール・アンインストールするためのパッケージ管理ツールです。Python 3.4 以降では「pip」が標準で付属しています。 *11


2.PyCharm をインストール

Q.なぜ PyCharm を使うの?
A.開発しやすいのが一番の理由です。そのほか、「venv」(仮想環境を作成するためのモジュール)や「pip」(パッケージ管理ツール)に詳しくなくても PyCharm の画面をポチポチ操作するだけで仮想環境を作れたり、ライブラリをインストールしたりできるので、初心者にも優しいツールになっています。

Q.初期設定は?
A.PyCharm は「out of the box(箱から取り出してすぐに使える、難しい設定などは一切なしで使える)」というのが大きな魅力のひとつですので、インストール直後の状態でほとんどそのまま使えます。より開発しやすくするための最低限の設定については、拙ブログの過去記事「 PyCharm のオレオレ最強設定 - akiyoko blog」を参考にしてください。


3.PyCharm プロジェクトを作成

Q.PyCharm プロジェクトを作成するときに何を指定すればよい?
A.ワークスペースのディレクトリのパス、仮想環境のディレクトリのパス、Python インタープリタのパスを指定します。ワークスペース以外はプロジェクト作成後でも指定できますが、プロジェクト作成時に済ませておくことをオススメします。

Q.ワークスペースのディレクトリは何を設定すればよい?
A.私はデフォルトのディレクトリを使っています。macOS であれば「~/PycharmProjects/」がデフォルトのワークスペースを配置する場所になります。

Q.仮想環境のディレクトリのパスは何を設定すればよい?
A.デフォルトのまま、プロジェクトが作成されるディレクトリ直下に「venv」という名前のディレクトリを作ればよいでしょう。

Q.Python インタープリタのパスは何を設定すればよい?
A.macOS であれば「which python3」で表示されるパス (*12)、Windows であれば「where python」で表示されるパスを指定します。

Q.Django をローカルPC にインストールするのはなぜ?
A.以下の理由があります。

  • Django に同梱されている django-admin.py(Django 管理コマンドユーティリティ)でプロジェクトのひな形を作るため
  • プロジェクトのひな形作成時に生成される manage.py(プロジェクト管理コマンドユーティリティ)でアプリケーションのひな形を作るため
  • PyCharm 上で Django モジュールへのコードジャンプができるようにするため



以降で、無料版 PyCharm で Django 開発環境を構築するまでの手順を実際に進めていきます。なお、私の環境は macOS 10.13(High Sierra)でそれを前提に進めていきますが、Windows 環境でも問題なく進められると思います。



1.Python 3 をインストール

Python 公式サイト から Python 3 をインストールします。
なお、macOS にはデフォルト状態では Python 2.7 が入っています。Windows 10 の場合は Python はインストールされていないと思います。

https://www.python.org/downloads/ から、インストーラをダウンロードします。

f:id:akiyoko:20180617173533p:plain


インストーラをダブルクリックしてインストールします。

f:id:akiyoko:20180617174009p:plain:w400

macOS の場合は自動的に PATH に指定されますが、Windows の場合はインストーラ実行時に「Add Python 3.6 to PATH」をクリックして PATH に追加します。

f:id:akiyoko:20180617174021p:plain:w350


今回の場合では、macOS では「python3」として実行できるようになります(Windows の場合は「python」)。


(macOS 10.13 の場合)

$ python3 --version
Python 3.6.5

$ which python3
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3

(Windows 10 の場合)

> python --version
Python 3.6.5

> where python
C:\Users\akiyoko\AppData\Local\Programs\Python\Python36-32\python.exe

 

2.PyCharm CE をインストール

https://www.jetbrains.com/pycharm/download/ から、Community 版である「PyCharm CE」のインストーラをダウンロードします。

f:id:akiyoko:20180617174742p:plain


インストーラをダブルクリックしてインストールを完了させます。



PyCharm CE を起動すると、いくつか初回設定を選択する画面になりますが、こちらは自分のスタイルに合わせて適宜選択します(後で変更し直すこともできます)。

なお、最初に出てくるキーマップ(keymap scheme)は、以前から使っているユーザーであれば「Mac OS X 10.5+ keymap」がよいかと思います。PyCharm 公式ショートカット一覧(Windows版 / Mac版)も非常に役立ちます。

f:id:akiyoko:20180617174858p:plain:w500
f:id:akiyoko:20180617174913p:plain:w500
f:id:akiyoko:20180617174927p:plain:w500
f:id:akiyoko:20180617174940p:plain:w500



3.PyCharm プロジェクトを作成

PyCharm プロジェクトを作成するには、PyCharm 起動後に「Create New Project」をクリックします。

f:id:akiyoko:20180617175016p:plain:w400

次の内容を入力してプロジェクトを新規作成します。
この際、「Virtualenv」を指定することで、プロジェクトごとに仮想環境が作成されます(仮想環境のディレクトリ名は「venv」としています)。 *13

項目 設定値
Location: 「/Users/akiyoko/PycharmProjects/mysite」
New environment using: 「Virtualenv」
Location: 「/Users/akiyoko/PycharmProjects/mysite/venv」
Base interpreter: 「/Library/Frameworks/Python.framework/Versions/3.6/bin/python3」(「which python3」の実行結果をコピー&ペースト (*14))

f:id:akiyoko:20180617175028p:plain

PyCharm プロジェクトが作成されました。

f:id:akiyoko:20180617175045p:plain


「Preferences」(⌘ + ,)から「Project Interpreter」を開き、下部の「+」ボタンをクリックして、Python パッケージをインストールする画面を開きます。

f:id:akiyoko:20180617175102p:plain

例えば、「Django」を検索して、現時点の 2系の最新版である「2.0.6」をインストールします。

f:id:akiyoko:20180617175118p:plain

依存パッケージを含めてインストールが完了しました。

f:id:akiyoko:20180617175143p:plain

次に、左下のアイコンをマウスオーバーして「Terminal」を選択すると、仮想環境がアクティベートされたターミナルが起動します。

f:id:akiyoko:20180617175200p:plain

アクティベートされない場合は、「Preferences」から[Tool]>[Terminal]>[Activate virtualenv]にチェックが入っているかを確認してみてください。

f:id:akiyoko:20180617175224p:plain

それでもダメな場合は、仕方なく以下のコマンドを実行します。

$ source venv/bin/activate


 
最後に、ターミナル上で次のコマンドを実行して、Django プロジェクトのひな形を作成します。設定ディレクトリ名は拙書に倣って「config」としています。

(venv) $ django-admin.py startproject config .


これで PyCharm で Django を開発する環境が整いました。


最後に

最後に一番大事な話。
4月に「技術書典4」で販売して即完売した「現場で使える 基礎 Django」が、現在増刷して絶賛発売中です!

無償の PyCharm CE を利用すれば、仮想環境を作成するための「venv」やパッケージ管理ツールの「pip」のことがよく分からなくても、Python 開発のためのプロジェクトを簡単に作成することができます。今回紹介した手順に従えば、Django の開発環境もラクラクと構築することができると思います。これで安心して Django の開発に取り組めますよね。あとはこの本を読んで勉強するだけですよね。

booth.pm


この本は B5サイズ・148ページの 本格的な Django 解説書 ですが、Django を仕事の現場で6年ほど使っている私が 「現場でこんな本があったらなぁ」という想いで書いたので、仕事で使っているあなたにぴったりな本 に仕上がっているはずです。
そしてこの本は特に、

  • Django の日本語書籍が無くて困っている方
  • Django で一度挫折したことがある方

に絶対オススメの一冊となっています。


過去記事で読みどころの解説や読者の方々の評価を紹介していますので、気になる方はこちらも合わせてご覧ください。

《過去記事》
akiyoko.hatenablog.jp

Django 1.11 と 2.0 の違い (「現場で使える 基礎 Django」本の補講その1)

akiyoko です。
この記事では、私が執筆した Django の同人誌「現場で使える 基礎 Django」で説明しきれなかった部分の加筆・補足をしています。まだ本を読んでいない方にも読める記事になっていますので、ご安心を。

補講その1として今回は、「Django のバージョン」、とりわけ「Django 1.11 と 2.0 の違い」 について取り上げます。


「現場で使える 基礎 Django」の表紙に書かれた 「1.11 LTS 対応」という文字を見て、「なーんだ、最新の Django 2 じゃないのかよ!」と敬遠している貴方のためにせっせと書き上げました。


《宣伝》

「現場で使える 基礎 Django」は現在、増刷して絶賛発売中です!
booth.pm




Django のバージョンについて

昨年2017年12月に、Django 2.0 がリリース されました。
Wikipedia によると 1.0 がリリースされたのが2008年9月なので、実に9年3ヶ月ぶりのメジャーバージョンアップとなりました。


それから半年ほど経ちましたが、現場ではまだ1系と2系が混在している、いわば過渡期の状況ではないでしょうか(あくまで私の肌感覚ですが)。


理由は3つほど考えられます。

【理由その1】

まずは、LTS の問題です。LTS とは「Long-Term Support」の略で、開発コミュニティからセキュリティパッチが長期間提供される特別なバージョンのことを指します。その点、Django 2系はまだ LTS バージョンがリリースされていません。LTS として予定されている「2.2」のリリースは 2019年4月となっており、まだ 10ヶ月ほど先になっているのが、2系へのバージョンアップに踏み切れない理由の一つに挙げられます。

f:id:akiyoko:20180531235800p:plain:w500
Django のバージョンごとのサポート状況
(画像は https://www.djangoproject.com/download/ より引用)


すでに次期 LTS の「2.2」のロードマップも細かく決まっていて(多少ずれるようですが)、2019年の4月にリリースされることが予定されています。

予定日 詳細
2019年1月14日 Django 2.2 アルファ版; 追加機能凍結
2月15日 Django 2.2 ベータ版; バグフィックス凍結(致命的なバグ対応は除く)
3月15日 Django 2.2 RC 1(リリース候補); 翻訳凍結
4月1日まで Django 2.2 正式版

https://code.djangoproject.com/wiki/Version2.2Roadmap より)


なお、1系のマイナーバージョン「1.12」はリリースされないことが決まっているため、「1.11」が 1系で最後のマイナーバージョンとなります。1系の最新バージョン は本記事の執筆時点で「1.11.14」となっています。


ということで、ビジネスで利用するとなると公式サポートが長い 1系がまだまだ主役の場合が多いのではないでしょうか。実際、現場の動きとしては「早く 2系へ移行しなければ!」という切迫感はまだあまり感じられません。

【理由その2】

次に、「Django 2系が Python 2のサポートを打ち切った」というのも、Django 2 への移行を阻害している大きな要因になっているのではないかと考えています。例えば、Python 2 で実稼働している Django 1系のプロジェクトでは、直ちに 2系にバージョンアップできない事情もあるでしょう。

【理由その3】

最後に、状況によっては利用しているライブラリが Django 2 にまだ対応していないということも考えられます。


結論として、現時点では、仕事の現場で使うなら「1.11 LTS」(2.2 LTS に向けて 2.0 から追従していくなら 2系でもOK)、趣味や研究で利用するなら「2系」を使えばよい と私は考えます。





ここで、実際の Django のバージョン別の利用状況を見てみましょう。

5月に開催された DjangoCongress JP 2018 で発表された事前アンケートの結果によると、Django 各バージョンの利用状況は以下の通りでした。


f:id:akiyoko:20180530221907p:plain:w300
DjangoCongress JP 2018 事前アンケート 画像を akiyoko が編集)

Django バージョン 利用率
1.8 以前 約 12 %
1.8 LTS 約 20 %
1.9〜1.10 約 21 %
1.11 LTS 約 24~25 %
2.0 約 22~23 %


2.0 の利用率が22~23 %にとどまっているという結果は要注目です。私の率直な感想は「意外と少ないなぁ」でした。半分まではいかないとしても、もう少し多いのかなと予想していました。もちろんアンケート自体は何ヶ月か前から収集していたはずなので、現時点での数値とは多少の開きがあるとは思いますが。


Django 1.11 と 2.0 の変更点

Django 2.0 のリリースノート には、1系の最終バージョンである「1.11」から「2.0」への変更点が記載されています。


大きな変更点としては、

  • Python 2 のサポートが打ち切られた
  • URLconf の書き方が簡単になった(django.urls.path() が追加)
  • モデルの ForeignKey と OneToOneField で「on_delete」オプションが必須に

が挙げられるでしょうか。後で詳しく説明します。

それ以外の細かな変更点のうち個人的に気になったところを以下にズラズラと挙げましたが、ぶっちゃけ、そこまで大きな変更点はありません。 一番インパクトが大きいのはやはり、上で挙げた 「Python 2 のサポート打ち切り」 でしょう。

  • ミドルウェアを settings.py で設定する際の変数「MIDDLEWARE_CLASSES」が廃止(「MIDDLEWARE」を使う)
  • User.is_authenticated() と User.is_anonymous() がメソッドではなく、属性になった
  • 管理サイトの画面がレスポンシブ対応に
  • Window 関数の OVER 句に対応
    • MySQL では 8.0.2 以降で対応
  • MySQL でクエリ内の「__search」ルックアップが使えなくなった
  • MySQL のトランザクション分離レベル(isolation level)のデフォルトが「read committed」に。1系では「repeatable read」だった
  • runserver で立ち上がるサーバが HTTP/1.1 に対応
  • django.conf.urls.include() の namespace を指定するときは、インクルード先の URLconf に app_name の指定が必須になった
    • app_name が指定されてあって、且つ namespace を include の引数として指定すると、値を上書きできるっぽい
  • django.conf.urls.include() の app_name 引数がなくなった
  • カスタムテンプレートタグがキーワード引数のみを許容
  • handler404 などのハンドラがコーラブルに(1系ではドット区切りの文字列だった)
  • バイト文字列はインプット・アウトプット以外の部分では扱わないようになった *1
  • AbstractUser.last_name の max_length が 150 に増えた(これまでは 30)
  • クエリをスライシングした後に QuerySet.reverse() や last() ができなくなった
  • 外部キー制約が SQLite でも有効に
  • QuerySet.iterator() が一度に取得する行数が 100 から 2000 になった

ここに挙げたものの中には検証していないものも多々ありますので、誤訳や誤解がありましたらご指摘いただけるとありがたいです。




大きな変更点として挙げた3点について、詳しく説明していきます。

1. Python 2 のサポート打ち切り

先に述べた通り、Django 2.0 では Python 2系のサポートが打ち切られました。Django 2 を使う場合には、Python 3.4 以降が最低限必要になります。Django 1.11 および 2.0 がサポートする Python のバージョンをまとめたものが以下の表になります。

  Python 2.7 3.4 3.5 3.6 3.7
Django 1.11
Django 2.0


(Python 2 系をサポートする最後のバージョンである)Django 1.11 LTS のサポートは早ければ 2020年4月に終了、Python 2.7 自体のバグフィックスのサポートは2020年1月に終了 するので、Python 2 を使っているプロジェクトは2019年末までには3系への移行を済ませる必要があります。

Python 2 で苦労した私としては、Python 2 のサポートをバッサリ切ったことはかなり嬉しいのですが、対応に追われるプロジェクトも今後出てきて大変そうだなという印象です。 *2


2. URLconf の書き方(URL ルーティングのシンタックス)

Django 1系では、正規表現の URL ルーティングは django.conf.urls.url() 関数を使って

from django.conf.urls import url

...(略)...
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
url(r'^shop/(?P<book_id>\d+)/$', views.detail, name='shop_detail'),

というシンタックスで書いていましたが、新しく追加された django.urls.path() 関数を使って

from django.urls import path

...(略)...
path('articles/<int:year>/', views.year_archive),
path('shop/<int:book_id>/', views.detail, name='shop_detail'),

と簡潔に書くことができるようになりました。
django.conf.urls.url() を使った書き方は、Django 2.0 でもそのまま使えるように互換性が保たれていますし、同じ用法で使える django.urls.re_path() が追加されたのでそれを使って書き直してもよいと思います。

3. ForeignKey と OneToOneField で「on_delete」オプションが必須に

モデルの ForeignKey と OneToOneField で「on_delete」フィールドオプションが必須になりました。このあたりは、「現場で使える 基礎 Django」の中でもしっかり説明してあります。


booth.pm



ここで、細かな変更点のうち、Windows 関数のサポートについても少し説明を加えておきます。

Window 関数について

Windows 関数は、あるまとまったデータ群(Window で区切られた集合)に対して集計処理をするための機能です。ランク付け(RANK 関数を使う)が一番理解しやすいでしょうか。なお、全ての Window 関数には「OVER句」が必要になります。

(参考)[SQL] 最強の分析ツールと言われるWindow関数について私が学んだこと | Developers.IO


Window 関数自体は、PostgreSQL や Oracle では以前からサポートされていましたが、MySQL では 8.0.2 以降で導入されています。なお、Django 組み込みのバックエンドも PostgreSQL、Oracle、MySQL(8.0.2以降)で Window関数をサポートしていますが、データベースの種類と関数によってはサポートが異なる場合もあるとのことです。 *3




最後に、MySQL のトランザクション分離レベルについて調べたことを書いておきます。

MySQL のトランザクション分離レベルについて

tree-tips: MySQLのトランザクション分離レベル | MySQL」に簡潔にまとめられていたのですが、1系でデフォルトだった「repeatable read」は 2系でデフォルトになる「read committed」に比べて「ファジーリード」(他セッションがコミットした更新データを参照してしまう)や「ファントムリード」(他セッションがコミットした追加データを参照してしまう)は起きないが、性能は「read committed」の方がよい(バージョン管理の範囲が狭くなるため)とされています。

MySQL 自体のデフォルトの分離レベルは MySQL5.6の公式ドキュメント によると「repeatable read」で、8.0 でも変わりません(変わるという噂もあるようですが)。それに対して、Oracle、PostgreSQL、SQL Server などでは「read committed」がデフォルトとなっています。

(参考)

 

そもそも 2.0 へのバージョンアップは必要なのか?

さて、そもそも 2.0 へのバージョンアップは必要なのでしょうか?


パッケージをアップデートする理由は、

  • 新しいバージョンで導入された新しい機能や改善点を利用したい場合
  • バグ修正によるリスク減少
  • セキュリティパッチのサポート延長
  • 一気にバージョンアップすることのコストを抑える
    • 例えば、LTS から LTS への大ジャンプはコストが掛かるため、普段から出来るかぎり最新バージョンに追随しておく
  • 依存しているパッケージ・言語のサポートの問題

などが考えられます。 *4


しかしながら、これらのメリットが無いのであれば、現在使っているパッケージを無理にバージョンアップさせなくてもよいでしょう。バージョンアップしなくても、例えば、特定箇所のバグ修正であれば手動でバックポートすることで対応できることもあります。


最後に

最後に一番大事な話。
4月に「技術書典4」で販売して即完売した「現場で使える 基礎 Django」が、現在増刷して絶賛発売中です!

対象バージョンは「Django 1.11 LTS」となっていますが、この記事で説明したように、Django の「1.11 LTS」と「2.0」は(Python 2 のサポート以外は)それほど大きな変更点はなく、「2.2 LTS」がまだリリースしていないため様子見が必要ということを踏まえると、もう買うしかないという気持ちになってきたはずですよね。

booth.pm


この本は B5サイズ・148ページの 本格的な Django 解説書 ですが、Django を仕事の現場で6年ほど使っている私が 「現場でこんな本があったらなぁ」という想いで書いたので、仕事で使っているあなたにぴったりな本 に仕上がっているはずです。
そしてこの本は特に、

  • Django の日本語書籍が無くて困っている方
  • Django で一度挫折したことがある方

に絶対オススメの一冊となっています。


過去記事で読みどころの解説や読者の方々の評価を紹介していますので、気になる方はこちらも合わせてご覧ください。

《過去記事》
akiyoko.hatenablog.jp


*1:困っている人は「Django 2.0へのアップデート (Removed support for bytestrings編)」の記事が参考になるはず!

*2:他人事ではないのが恐ろしいところ。。

*3:Query Expressions | Django documentation | Django

*4:Upgrading Django to a newer version | Django documentation | Django を参考

「現場で使える 基礎 Django」ってどんな本? その読みどころをガッチリ解説

akiyoko です。

今回は、4月22日の「技術書典4」 *1 で頒布した人生初の技術同人誌 『現場で使える 基礎 Django』 の概要と読みどころについて解説します。


現在、オンラインショップの「BOOTH」にて、増刷した紙の本を販売中です。*2 興味を持たれた方は、部数限定・売り切れ御免(再販予定なし)ですので、在庫があるうちにお買い求めいただければと思います。

booth.pm

ショップ側には入庫が完了している状態なので、すでに購入済みの方にはショップ側の検品が終わり次第、順次発送される予定です。



 

概要

どんな本?

この本は、B5サイズ・148ページの 本格的な Django 解説書 です。

Django を仕事の現場で6年ほど使っている私が、日本語で書かれた書籍が少なくてずっと困っていたので自ら書きました。「現場でこんな本があったらなぁ」という想いで書いたので、仕事で使っているあなたにぴったりな本に仕上がっている はずです。


表紙はこんな感じです。
電車の中でも読めるようなものがよいと思い、派手さは極力抑えるようにしました。

f:id:akiyoko:20180531233638p:plain:w200


いわゆる「技術系同人誌」というジャンルの自費出版本になりますが、いたって真面目な技術解説書です。

表紙も含めて基本的に一人で作り上げました。レビューには Django 界隈から有志の方二人と、同僚二人に協力していただきました。スタートから入稿まで二ヶ月ほどで書きましたが、執筆にかかった時間は優に300時間を超えていると思います *3


 

内容は?

目次はこのようになっています(クリックで拡大します)。



f:id:akiyoko:20180416234902p:plain:w160

f:id:akiyoko:20180416234958p:plain:w160

f:id:akiyoko:20180416235011p:plain:w160


この本は、サンプルプロジェクトを実装ながら(読者によっては実際に手を動かしながら)技術要素を順番に説明していくような、いわゆるチュートリアル本ではありません。Django の全体像から構成要素の詳細まで、基本動作やハマりやすいポイントについて幅広く解説した本です。読者の方々に「Django って意外と簡単だな」と感じていただけることを目指して、基礎から詳しく丁寧に解説しています。


本書の構成としては、第 3 章までで Django の全体像や重要な概念の説明をおこない、 第 4 章以降でそれぞれの構成要素の説明をしながら、私の知見や経験から得たベストプ ラクティスについても紹介しています。


f:id:akiyoko:20180526163355p:plain:w250


対象読者

本書の対象読者としては、

  • Python の文法はある程度分かるけど Django は初めてという初心者の方
  • Django を始めてみたけど今いちコツが掴めないという初級者の方
  • Django のベストプラクティスを学びたいと考えている中級者の方

を想定しています。特に、

  • Django の日本語書籍が無くて困っている方
  • Django で一度挫折したことがある方

にピッタリな再入門書にもなっていると思います。
しかしながら、Webアプリケーション開発の経験がまるっきり無いという方には多少難しい内容になっているかもしれません。

 

本の評判

日本語のまとまった情報が少ないということでやはりニーズが高かったのでしょうか、技術書典4 では(強気で刷った)300部が3時間ほどで完売してしまいました。当日は初参加の上に予想をはるかに超えた売れ行きにてんてこ舞いで、全く余裕がありませんでした。



Twitter に上がっていた Django 本の感想を勝手にピックアップさせていただきました。おおむね好評のようで、ほっとしました。



本を買っていただいた上に感想までブログに書いてくださった心優しい方も何人かいらっしゃいました。本当にありがとうございます。こちらも勝手に貼り付けさせていただきます。



匿名の読後アンケートフォーム を用意して感想を聞かせていただいたのですが(現在も絶賛募集しているので是非とも感想をお願いします)、その結果もおおむね良かったようです。改善すべき点としてご指摘いただいた部分については(すでに v 1.0.1 で対応したものもありますが)今後の改訂や補足ブログのネタにさせていただきたいと思います。



 

読みどころ

章ごとの簡単な解説をしながら、本書の読みどころについて書いていきます。

第1章: はじめに

1.1  なぜ今 Django なのか?
1.2  本書について
1.3  動作環境と各種バージョン
1.4  まとめ

短く書きたかったのですが、勢い余って長くなってしまった序章。

機械学習などで Python を使う人が増えているので、Django もどんどん盛り上がってくるよねという書き出しだったのですが、実際、私がよく参加させていただいている fin-py でも「Django の勉強がしたい」という声がちらほら聞こえていましたし、最近では日本では初めての DjangoCongress が今年5月に開催されるなど、本格的な盛り上がりを感じます。


Django に少し詳しい人なら気になるのが、Django のバージョンでしょう。結論から言えば、仕事で使うなら今はまだ「1.11 LTS」、趣味で使うなら「2系」を使えばよいと考えています。この本では仕事の現場にフォーカスしたので「1.11」推しとなっていますが、実際には 1.11 と 2.0 はそんなに違いがありません(Python 2 のサポートが切られたことを除いて)。これについては追々、補足のブロク記事で解説したいと思います。


(2018/6/15 追記)
補講記事をアップしました。
akiyoko.hatenablog.jp


Python は 3.5系で動作確認しましたが、これは 3.6系でも特に問題ないはずです。改訂するのであれば、3.6系を前提に書きたいと考えています。

第2章: アーキテクチャ

2.1  全体像
2.2  MTVフレームワークとは?
2.3  まとめ

何事にもまずは全体像から掴んだ方が理解しやすいので、大枠から解説。ビューやフォーム、モデルなどの構成要素(コンポーネント)がどのように連携しながら動作しているのかを、図を見ながらざっくりと理解することができます。

第3章: プロジェクト構成

3.1  プロジェクトとアプリケーション
3.2  django-admin.py と manage.py
3.3  よくあるプロジェクト構成
3.4  ベストプラクティス1: 分かりやすいプロジェクト構成
3.5  まとめ

本章の読みどころは、startproject コマンドや startapp コマンドを使って自動生成されたファイルの説明と、分かりやすいプロジェクト構成についてです。 *4

第4章: URL ディスパッチャと URLconf

4.1  概要
4.2  URLconfの書き方
4.3  ベストプラクティス2: アプリケーションごとに urls.py を配置する
4.4  まとめ

リクエストをビュー関数に振り分ける「URLディスパッチャ」と、リクエスト URLとビュー関数をマッピングしている「URLconf」(URL設定)についての解説です。URLconf については 2系で書き方が新しくなる(ただし 1系の書き方も継続して使える)ので、そちらは補足ブログで追記したいと考えています。

第5章: ビュー(View)

5.1  概要
5.2  ビュー関数の書き方(関数ベース vs クラスベース)
5.3  全ての基本となる基本汎用ビュー
5.4  シンプルでよく使う基本汎用ビュー
5.5  さまざまな用途に特化した汎用ビュー
5.6  ログイン・ログアウトについて
5.7  まとめ

本書では、関数ベースのビューについてはほとんど説明しておらず、クラスベースビューを中心に解説しています。クラスベースビューを使う理由やメリットについてももちろん書いていますし、デメリットである継承の複雑さやオーバーライドできるメソッドや変数がどうなっているかについては、解決のヒントを提示しています。

この章に書いた、Django でのログイン・ログアウト処理は実はややこしいのですが、よく分かっていなかった人もこれを読めばだいぶスッキリすると思います。

第6章: モデル(Model)

6.1  概要
6.2  モデルクラスの書き方
6.3  「一対一」「多対一」「多対多」リレーションはどう定義するか?
6.4  よく使われるUserモデル
6.5  モデルマネージャとクエリセット
6.6  単体のオブジェクトを取得する
6.7  複数のオブジェクトを取得する
6.8  単体のオブジェクトを保存・更新・削除する
6.9  ベストプラクティス3: Userモデルを拡張する
6.10  ベストプラクティス4: 発行されるクエリを確認する
6.11  ベストプラクティス5: select_related / prefetch_related でクエリ本数を減らす
6.12  まとめ

便利だけど実はいろいろとややこしい、そんなモデルを分かりやすく解説しています。

この章は本書で最もページ数を割いたトピックですが、なぜそんなにページ数を割いたかというと、個人的にモデルが Django 最強の武器(そして最も厄介な諸刃の剣)だと考えているからです。Django を使う場合は DB を使わないことは少ないと思いますので、モデルの仕組みを理解するのは必須でしょう。

モデルの設計で重要な「一対一」「多対一」「多対多」のリレーションについては、基本から説明しています。分かりにくいモデルマネージャとクエリセット、遅延評価、関連先モデルの JOIN についても詳しく説明しています。発展編として、あまり知られていない(と思われる)「select_related」「prefetch_related」の使いどころや実際に発行される SQL 文を確認する方法についても解説しています。

またこの章では、Django の User モデルについても解説。ややこしい継承関係や User モデルのカスタマイズ方法についても取り上げています。

第7章: テンプレート(Template)

7.1  概要
7.2  変数表示
7.3  フィルタ
7.4  テンプレートタグ
7.5  ベストプラクティス6: ベーステンプレートを用意する
7.6  まとめ

Django がデフォルトのテンプレートエンジンとして利用している「DTL(Django Template Language)」の記法について解説(Jinja2 については解説していません)。数あるフィルタやテンプレートタグの中からよく使うものをピックアップして紹介しています。

第8章: フォーム(Form)

8.1  概要
8.2  バリデーションの仕組み
8.3  フォームクラスの書き方
8.4  ビューやテンプレートからフォームを利用する方法
8.5  CSRF対策について
8.6  ベストプラクティス7: こんなときは ModelForm を継承しよう
8.7  まとめ

ユーザーの入力データを保持するためのフォームですが、やはりキモとなるのはバリデーションですよね。フォームでは is_valid() を起点としてさまざまなメソッドが順番に呼ばれますが、そのややこしいバリデーションのフローを図を使って分かりやすく解説しています。また、さらにややこしい ModelForm についても何とか一枚の図にまとめてみました。必見です。

エラーに悩まされた方も多いであろう、CSRF対策(csrf_token)についてもこの章で解説しています。

第9章: ミドルウェア(Middleware)

9.1  概要
9.2  主なミドルウェアの役割
9.3  ミドルウェアの書き方
9.4  ベストプラクティス8: メッセージフレームワークを使う
9.5  まとめ

Django のミドルウェア、何となく使ってませんか?

見逃されがちなミドルウェアですが、実は縁の下の力持ちなんですよね。ということで、新規プロジェクト作成時にデフォルトで設定されるミドルウェアの役割や必要性などについて解説しています。

また、便利なメッセージフレームワーク(いわゆるフラッシュメッセージ)については、注意点やちょっとした TIPS とともにベストプラクティスとして解説しています。

あと、1.11 から導入された ミドルウェアの新しい書き方 についても言及しています。django.utils.deprecation.MiddlewareMixin を継承する書き方は非推奨にマークされているので、要注意です。

ミドルウェアについてここまできちんと書いている Django の書籍は、おそらくこれまで無かったと思います。

第10章: 設定オブジェクトと設定ファイル(settings.py)

10.1  概要
10.2  インストールするアプリケーション一覧
10.3  デバッグ設定
10.4  静的ファイルパス関連の設定
10.5  ロギングの設定
10.6  その他の重要な設定
10.7  ベストプラクティス9: 個人の開発環境の設定は local_settings.py に書く
10.8  ベストプラクティス10: シークレットな変数は .env ファイルに書く
10.9  まとめ

実はこの章が本書の一番のウリかもしれません。匿名の読後アンケート でも最も評価が高かった章の一つでもあります。

Django でつまづくパターンとして、settings.py によく分からない設定がたくさん羅列してあるのを見たり、runserver を動かしたときに何だか分からないエラーが出たりして途方に暮れる、というのがあるのではないでしょうか。あるいは、「この設定って何が正解?」「動いたけどこのままでいいんだろうか?」と悩みながら何となく使っているのではないでしょうか。

また、

  • 「INSTALLED_APPS」にはアプリケーション名を書くべきか、それとも apps.py の AppConfig のサブクラスを書くべき?
  • 静的ファイルパス関連の「STATIC_URL」「STATIC_ROOT」「STATICFILES_DIRS」の違いは一体何なの?
  • 「SECRET_KEY」や「ALLOWED_HOSTS」って何に使うの?
  • 「LOGGING」は具体的にどう設定すればいいの?

など疑問は尽きないと思います。この章ではこれらの疑問に全てお答えしています。

そして現場で利用するなら必須のベストプラクティスとして、本番用の settings.py と個人開発用のものを分けるための方法や、シークレットな変数値を環境変数に分離する方法などについても解説しています。

第11章: データベースのマイグレーション

11.1  概要
11.2  マイグレーションコマンドについて
11.3  まとめ

マイグレーションについての説明は短め。実際の運用ではもう少しディープな理解が必要かもしれませんが、紙面の都合で割愛しました。

第12章: 開発用 Web サーバ(runserver)を起動する

12.1  概要
12.2  runserver コマンドについて
12.3  まとめ

開発用の Web サーバ(runserver)の特徴や使い方、Docker で利用する場合の注意点について書きました。こちらも割とシンプルにまとめています。

第13章: 管理サイト(Django Admin)

13.1  概要
13.2  モデルの登録方法
13.3  一部機能のカスタマイズ方法
13.4  利用条件
13.5  使い方
13.6  まとめ

Django の便利な点として、この管理サイト(Django Admin)が挙げられるかと思います。ログインできるユーザーや権限などの利用条件、一部機能のカスタマイズ方法など、少し詳しめに解説しています。

第14章: 便利な Django パッケージを使おう

14.1  概要
14.2  DRY系パッケージ
14.3  開発補助系パッケージ
14.4  まとめ

実際に開発する際にほぼ必須の知識になってくる「Django パッケージ」について、選定のコツや私のオススメするパッケージをいくつか紹介しています。

第15章: サンプル実装

「本のオンラインショップ」をテーマに、ログイン・ログアウトまわりを中心に実装したサンプルプロジェクトです。本書で説明したことをベースにしたサンプル実装になっており、コードには日本語の説明をなるべく多く書きました。紙面の都合でコードの掲載はカットし、その代わりにソースコードのURLを載せています。

付録

付録A: macOS における Django 開発環境の構築方法
付録B: Docker でラクラク開発
付録C: 覚えておきたい Django 管理コマンド 10 選

ローカルPC への Python の導入方法については、技術書典バージョンでは Anaconda を使った方法について書いていましたが、読者の方からの指摘を受けて、「v1.0.1」(BOOTH での6月以降販売分)ではよりシンプルな方法に修正しています。また、Django の開発環境についても PyCharm をベースにしたものに書き直しました。

あと、自分でも最近取り入れて良かったと思っているのが「Docker でラクラク開発」です。ローカルPCの環境を汚すことがなく、要らなくなったらすぐに環境を作り直せるので、開発や検証が容易になります。



 

おわりに

「現場で使える 基礎 Django」ってどういう本なの? 買うべきなの? と悩んでいる人向けに、この本はどういう本なのか、誰にピッタリな本なのかを解説してみました。

仕事の現場で使っている人を主なターゲットにしていますが、仕事ではなく趣味で使ってるという方や、2系の情報が知りたいという方にも有益な情報がたくさん含まれているはずですので、是非ともお手にとっていただければと思います。よろしくお願いします。


《販売サイトはこちら》
booth.pm


おまけ

DjangoCongressJP 2018 の一日目に一般参加したのですが、偶然にも LT で発表させていただく機会を得て、「Django の同人誌を書いた話」というテーマで登壇しました。

意外と小心者なので、テンパって噛みまくりでお聞き苦しかったかと思います。その節は大変失礼いたしました。

*1:春と秋の年二回ずつ開催される、技術者による技術者のための技術系同人誌の販売イベント。今回は4回目の実施となり、参加者は6,000人を超えました。 https://techbookfest.org/event/tbf04

*2:技術書典4で頒布したものから少しだけ改訂した「v1.0.1」バージョンになります。ページ数は同じです。

*3:多忙な時期とも重なり、本当に死ぬほど疲れました。。

*4:しかしながら、これがベストか?については異論あると思います。もう少し複雑になった場合の本格的なプロジェクト構成について、もし続編を書くのであればこのあたりも補足してみたいと考えています。

4/22 の「技術書典4」で「現場で使える 基礎 Django」を頒布します

akiyoko です。

このたび、4/22 の「技術書典4」で人生初の技術系同人誌『現場で使える 基礎 Django』を頒布する ことになりました。


techbookfest.org


f:id:akiyoko:20180416235202p:plain:w300
(表紙はこんな感じになりそうです。*1




(2018/4/25 追記)

お陰さまで技術書典4では300部を3時間ほどで完売することができました。皆さま、ありがとうございました!

部数限定ですが、会場に持ち込めなかった紙の本を BOOTH にて再販致しました。現地で購入できなかった方、技術書典4に来れなかった方は是非どうぞ。

akiyoko.booth.pm



「技術書典」って何?

技術書典」は、春と秋の年二回ずつ開催される、技術者による技術者のための技術系同人誌の販売イベントです。今回が4回目の開催になりますが、毎回どんどん認知度と熱量が上がっているようで、今回天気が良ければ 3,000〜4,000人ほどの来場者で溢れ返りそうな勢いのホットなイベントなのです(行ったことないけど)。

私は初のサークル参加でもあり、初のイベント参加にもなります。

techbookfest.org

前々から何か本が書きたいなと思っていたところで「当選したら書いてみようかな」という軽いノリでこのイベントのサークル参加に申し込みをしたら、見事に抽選に当たっ(ってしまっ)たのが二月初旬。そこからちまちまと目次を作り始め、本格的に書き始めたのは二月下旬あたり。そこから泣きそうになりながら毎日明け方まで執筆することを繰り返し、ようやく脱稿できそうな目処がついて安堵感を感じ始めています。これまでに要した総時間はおそらく 300時間を超えると思います。



こちらは昨日 Twitter で聞いたアンケート。
半数が入稿済みだった。皆さん早い!!



「基礎 Django」はどんな内容?

全148ページ(表紙や奥付を除けば本文 142ページ)まるまる Django 本です。執筆はほぼ完了し、現在絶賛校正中です。


本書の読者としては、

  • Python の文法はある程度分かるけど Django は初めてという初心者の方
  • Django を始めてみたけど今いちコツが掴めないという初級者の方
  • ベストプラクティスを学びたいと考えている中級者の方

を想定しています。

私自身 Django 歴がまだまだ浅い(仕事で6年ほど)ので上級者向けの本は書けませんが、Django の動作原理から実戦的な書き方まで、初級者向けの基礎知識として押さえるべき内容は全て網羅したつもりです。読者の皆さんに「Django って意外と簡単だな」と感じていただけることを目指して、基礎から詳しく丁寧に解説しています。

特に、

  • Django の日本語書籍が無くて困っている方
  • Django で一度挫折したことがある方

にオススメです。


目次

気になる目次は、



f:id:akiyoko:20180416234902p:plain:w190

f:id:akiyoko:20180416234958p:plain:w190

f:id:akiyoko:20180416235011p:plain:w190


となる予定です。
もう動かない・・・はず。


「基礎 Django」を書いた理由は?

今回 Django 本を書いた理由はズバリ、「Django の日本語の書籍が少ない」からです。 私自身、Django をずっと仕事で使っているのですが、日本語で書かれた良書が見つからず、結局「Two Scoops of Django」シリーズという海外の書籍(個人的に「ベスト・オブ・Django本」に認定)に辿り着いたわけですが、それだと初心者向けに薦める本としてはハードルが高過ぎるのではないかとモヤモヤを感じていたのです。Django の人気が今ひとつ上がらないのも、日本語の書籍が不足していることが大きな要因になっているのではないか、と思い立ったのがきっかけです。


akiyoko.hatenablog.jp


この状況を打破すべく、「無いのなら 自分で書こう Django本」ということでまず私から書いてみることにしてみました。この本が版を重ね、将来「ベスト・オブ・Django本」と呼ばれるようになればという願いを込めて。




頒布本情報

B5サイズ、148ページ(1円玉より少し小さい 9.3 mm の厚さです!)。

技術書典での価格は 1,000円。
お釣りの煩雑さを考えての特別価格です(他のサークルさんもだいたい 1,000円にしているようです)。

部数は未定。

頒布場所は「く33」の「あきよこブログ」です。
見本誌を置いてますので、立ち読みだけでもお気軽にどうぞ。

f:id:akiyoko:20180415000417p:plain


秋葉原UDX、4/22(日) 11時オープンですが、午前中はどえらい混雑すると思いますのでご注意を。

お品書きも作りました。

f:id:akiyoko:20180421021919p:plain:w400


今悩んでいること

来週月曜(4/16)が入稿の〆切で、そこで何部刷るかを決めなくてはいけません。

これまでの技術書典の売れ行きから考えて、200部くらい刷れば十分余るかな?と考えていたのですが、「万万が一早々に売り切れてしまって、欲しいという人が買えなかったら嫌だなぁ」という邪念がムクムクと出てきてしまっている状態がまさに今なのです。


後日、BOOTH で当日売り切れなかった紙の本(電子版はもし対応可能であれば)の販売をしようと考えているので、結構余ってもいいとは考えています。


もし反響があれば少し多めに刷ろうかなとも目論んでいたりしますが、どうなることやら。


何はともあれ、技術書典の当日(4/22)、秋葉原 UDX アキバ・スクエア まで遊びに来ていただければありがたいです!

ぜひ冷やかしにきてくださいませ。

*1:黄色の丸は「Django(ダンゴ)三兄弟」です。だいぶ古いな。。

仮想通貨税金計算サービス「BITCOINTAX」をリリースしました

アカウント登録不要、完全無料で利用できる税金計算サービス「BITCOINTAX」をリリースしました


もっと手軽に仮想通貨取引の税金計算を!
ドラッグ&ドロップだけで使える税金計算サービスが登場


f:id:akiyoko:20180213212659p:plain



【 サービスURL 】
 BITCOINTAX : https://bitcointax.jp/


 

背景

「ビットコイン」「NEM」「仮想通貨」などといったキーワードが連日のようにニュースを賑わせるようになり、ビットコインを始めとする仮想通貨が国内で広く認知されるようになってきました。仮想通貨を売買できる取引所も金融庁に仮想通貨交換業者として登録された業者を中心に競い合うように次々と設立され、スマホで手軽に仮想通貨の取引ができるようになった一方で、仮想通貨取引にかかる税金計算は複雑で、専門知識のない人にとっては非常にストレスフルな作業になってしまいがちです。


昨年12月に国税庁から「仮想通貨に関する所得の計算方法等について」という資料が公表されましたが、特に仮想通貨同士の売買については取引当時の時価を計算する必要があるなど計算は煩雑です。国内の取引所ならまだしも、国外の取引所で売買した場合の日本円での時価は容易には算出できず、国税庁の方針に従って税金計算をするには困難を極めます。


2月16日より平成29年分の所得税等の確定申告受付が開始されるにあたり、これから仮想通貨の税金計算をしようとする人がその煩わしさに途方もない時間を奪われてしまう人が多く出てしてしまうことが懸念されます。最近になって仮想通貨の税金計算サービスがいくつかリリースされ始めてきましたが、いずれのサービスもアカウント登録が必要であったりと手軽に使えるものがありませんでした。


そこで「BITCOINTAX」は、

  • アカウント登録不要
  • 取引所の取引履歴ファイルをドラッグ&ドロップするだけ
  • 無料で全ての機能が利用可能

という特徴を備え、誰でも簡単に使える税金計算サービスとしてリリースいたしました。

なお、現在の対応取引所は、bitFlyer*1)、CoincheckZaif*2)、bitbankBITPointPoloniexBittrexBinanceHitBTCCryptoBridge の計10種類となっておりますが、要望次第で随時対応を予定しています。


【お知らせ】
  • Bittrex 対応済み(2018年2月15日更新)
  • ご指摘を受けて一部計算の誤りを修正しました。お手数ですが、16日以前に利用された方は再度計算し直してください(2018年2月16日更新)
  • BITPoint 対応済み(2018年2月17日更新)
  • Zaif 対応済み(2018年2月18日更新)
  • Binance 対応済み(2018年2月18日更新)
  • CryptoBridge 対応済み(2018年2月19日更新)
  • HitBTC 対応済み(2018年2月21日更新)
  • bitbank 対応済み(2018年2月23日更新)


なお、他の取引所への対応やバグの修正依頼は、admin@bitcointax.jp 宛にご連絡ください(取引履歴ファイルを添付していただけると助かります)。




日本における仮想通貨のさらなる発展と、仮想通貨に携わる方々のストレスが少しでも解消されることを願っています。




【 サービスURL 】
 BITCOINTAX : https://bitcointax.jp/


 

使い方

BITCOINTAX にアクセスし、各取引所でダウンロードした CSV形式(取引所によっては Excel形式)の取引履歴のファイルをドラッグ&ドロップするだけで利用可能です。


f:id:akiyoko:20180213214829g:plain


アカウント登録などの面倒な作業無しに、すぐに使うことができます。



【 サービスURL 】
 BITCOINTAX : https://bitcointax.jp/


 

その他の特徴

  • 複数ファイルをまとめてドラッグ&ドロップすることも可能です(最大5ファイル・1MBまで)
  • 計算結果が表示された後に、続けて別の取引所のファイルをアップロードできます(計算が全てやり直されます)
  • 計算結果が表示された後に、計算結果を CSV形式でダウンロードできます(ダウンロードした CSVファイルを再びアップロードすることもできます)
  • アップロードされたファイルはサーバで保持していません

 

計算方法

  • 時価計算方法は移動平均法による *3
  • 時価計算には以下のデータを使用
    • bitFlyer の各通貨の時価については、Cryptowatch API が提供している1〜6時間足データを使用
    • Coincheck の各通貨の時価については、Coincheck が提供している日足データを使用
    • Zaif の各通貨の時価については、Zaif が提供している日足データを使用
    • bitbank のビットコインの時価については、bitbank.cc API が提供している時間足データを使用
    • Binance の各通貨の時価については、Binance API が提供している日足データを使用
    • CryptoBridge の各通貨の時価については、CoinMarketCap が提供している日足データを使用(ただし、120通貨中 63通貨のみ。2018年2月19日現在)
    • 上記以外の海外取引所の各通貨の時価については、Kraken(BTC/USD) Poloniex API が提供している時間足データを使用(2018年2月20日更新)
    • 海外取引所の場合の USD/JPY については、ドル円為替の日足データを使用
    • 2016年1月以降のデータを使用しているため、2015年12月以前の取引がある場合には対応できない場合があります

 

免責

  • 本サービスは予告なく停止、終了、仕様が変更されることがあります
  • 本サービスの利用によって生じたいかなる損失または損害については一切の責任を負いません

 


【 サービスURL 】
 BITCOINTAX : https://bitcointax.jp/


 

問い合わせ先

パブリックな問い合わせは GitHub Issue、プライベートな問い合わせは admin@bitcointax.jp または Twitter にお願いします

*1:現物取引のみ。bitFlyer Lightning(ビットコイン現物・FX・先物取引、イーサリアム現物の取引)には未対応です。

*2:現物取引のみ。信用取引・AirFX取引・先物取引には未対応です。

*3:参考:「移動平均法(棚卸資産の評価方法)の仕訳・会計処理 | 仕訳NET

2017年に読んだ本のリスト

akiyoko です。

2017年の読書歴を振り返ってみたのですが、技術系の本や雑誌を除いて38冊読んでいました。つまり、約10日に1冊以上読んだことになります。昨年は「多読」を心掛けていたのですが、私自身としては十分過ぎる結果だったと感じています(ちなみに一昨年は11冊)。


《過去記事》
akiyoko.hatenablog.jp


なお私の読書スタイルは、気になった本はポチポチと買っておいて、ヒマが出来たときにそのときの気分に合わせて読むというのが基本です。それ以外にも、学習したいテーマに沿って次々と連鎖的に読んでいくパターンや本の中で紹介されていたものを読んでいくパターンもあります。


今回は、昨年読んだ38冊のうち19冊を紹介します。


上記以外にも、ビットコイン・仮想通貨・ブロックチェーンの勉強のために読んだ本が11冊、投資やチャートの勉強のために読んだ本が8冊ありますが、後者はまた別途紹介するかもしれません。


《過去記事》
akiyoko.hatenablog.jp


来年も自分のペースを守りながら、できるだけ多くの本を読んでいきたいと考えています。


 

マネジメント系

一昨年の年末から年頭にかけて、自身のマネジメント力の欠如が顕になってきたとひしひしと実感したので、新たに知識を投入した上で実践していきたいと考えていました。

 

1.新1分間マネジャー

オススメ度:★★★☆☆


「新1分間マネジャー」はケン・ブランチャードとスペンサー・ジョンソンの共著で古典的なベストセラー「1分間マネジャー」の新版ですが、現代風にアレンジが施されているそうです。なおスペンサー・ジョンソンは「チーズはどこへ消えた?」の著者としても有名です。


「1分間」シリーズを全部読んだという shiba_yu36 さんのブログ記事を読んで、まずはこの本を読んでみようと思い立ちました。

「1分間顧客サービス」を読んだ - $shibayu36->blog;


本自体は薄く、ストーリー形式で描かれているので、すぐに読み終えられます。

この本の核となる 1分間マネジメントの「3つの秘訣」は、「新1分間マネジャーのゲームプラン」という図で完結にまとめられています。

  • 「1分間目標」
    • (共同で)明確な目標を立てる
    • 正しい行動とはどのようなものか見せる
    • 目標を1ページに1項目ずつ書き出す
    • 素早く頻繁に目標を読み返す
    • 自分の行動を振り返り、目標と一致しているかを確認するよう奨励する
    • 一致しない場合、行動を切り替えて成功を達成できるよう促す
  • (目標または一部の目標を達成したら)「1分間賞賛」
    • 行動をほめる
    • すぐほめる。具体的にほめる
    • どれほどうれしく感じているかを伝える
    • 少し間を置いて、部下にも満足感を味わわせる
    • さらによい仕事を続けるように励ます
  • (目標を達成できなければ)「1分間修正」
    • 協力して目標を明確化する
    • 事実関係を確認する
    • ミスをすぐに検証する
    • どれほど懸念しているかを伝える
    • 少し間を置いて、部下にも不安を味わわせる
    • ミスは取り返せること、人間として評価していることを伝える
    • いつまでも引きずらない


少し前にバズった記事「GEとAdobe、人事評価制度やめたってよ。目的のためには手段はどんどん変えていく」では、今までの人事評価ではフィードバックまでのサイクルが長すぎるという問題に対して、年次評価制度を撤廃して「頻繁にフィードバックを与える」という新しい仕組みを導入したと書かれていますが、新1分マネジャーで説明されている3つの秘訣「1分間目標」「1分間賞賛」「1分間修正」も目的は同じなのではないかと感じます。短く端的なフィードバックを頻繁に与えていくことで、社員や組織を変化の激しい現代に対応できるように変えていく、そんな新しいタイプのマネジャーが望まれているということなのでしょう。


 

2.1分間マネジャーの時間管理

オススメ度:★★★★☆


ケン・ブランチャードの「1分間」シリーズは数多く出版されていますが、著者自らが管理職の参考書として薦める五作として、

を挙げています。本作「1分間マネジャーの時間管理」は、サルの世話に追われて本職のマネジメントに掛ける時間が無いと悩む中間管理職に向けて贈られた「救いの書」となっています。なお、1分間シリーズには〈1分間マネジャー〉がメンターとしてストーリー中に登場するようなので、「新1分間マネジャー」は真っ先に読んでおいた方がよさそうです。


さて、本書の核として登場する「サル」は部下の肩から飛び乗ってくる「プロジェクトやトラブルに伴う『次の対応』」を指していますが、単に「次の対応」と書かずに「サル」に見立てて書くことで、インパクト絶大で忘れられない「アイコン」になっています。

ついつい部下の肩から飛び乗ったサルの世話をしてしまうと、余計な世話を焼くダメマネジャーになってしまうというのがストーリー仕立てで語られています。そしてサルを管理するには、何を、誰が、いつまでに、どのように実行するのかを確定することが重要と説きます。また、「何のためにこれをやっているのか」を自問し、はっきりした答えが出ない場合は、サルを抹殺した方が良いとも指南しています。


いつもながらストーリー仕立てになっているのがややダラダラした感じもしますが、本自体が薄くてすぐに読み終えられるので、半日ほど空き時間があるときに一気に読んでしまうのがよいかと思います。




 

3.人を動かす

オススメ度:★★★★★


人を動かすって本当に難しいですよね。「動かす」というより「動いてもらう」にはどうすればよいか? と悩むことが多いです。そんなときの薬になる、古典中の古典。これまで読んだことが無かったので、一念発起。なお、後で紹介する「SOFT SKILLS ソフトウェア開発者の人生マニュアル」の著者ジョン・ソンメズも最も推薦する必読書として挙げています(ただし、自助・自己啓発の本として)。

内容が分かりやすくて腹落ちすることも多く、各章のラストに簡潔なまとめが書かれているのも有難いです。ということで各章のまとめを列挙してみました(多少アレンジしていますが)。

  • 人を動かす3原則
    • 批判も避難もしない。苦情も言わない
    • 素直で、誠実な評価を与える
    • 強い欲求を起こさせる


上記の「人を動かす原則だけ」でなく、「人に好かれる原則」「人を説得する原則」「人を変える原則」についても書かれていますが、いずれにしても、まずは相手を立て、誠意を持って相手の身になり、相手に重要感を与えるようにすることが大事であると説いています。つまり、尊厳欲求・承認欲求などの高次の欲求に訴えかけることが重要であるということでしょう。

  • 人に好かれる6原則
    • 誠実な関心を寄せる
    • 笑顔で接する
    • 名前を覚える
    • 聞き手に回る
    • 相手の関心を見抜いて話題にする
    • 心からほめる(重要感を与える、誠意を込めて)
  • 人を説得する12原則
    • 議論を避ける
    • 相手の意見に経緯を払い、誤りを指摘しない
    • 自分の誤りを直ちに快く認める
    • 穏やかに話す
    • 相手が即座に「イエス」と答える問題を選ぶ
    • 相手にしゃべらせる
    • 相手に思いつかせる
    • 人の身になる
    • 相手の考えや希望に対して同上を寄せる
    • 人の美しい心情に呼びかける
    • 演出を考える
    • 対抗意識を刺激する
  • 人を変える9原則
    • まずほめる
    • 遠回しに注意を与える
    • まず自分の誤りを話したあと相手に注意する
    • 命令をせず、意見を求める
    • 顔を立てる
    • わずかなことでも惜しみなく心からほめる
    • 期待をかける
    • 激励して、能力に自信を持たせる
    • 喜んで協力させる


これらは部下や組織のマネジメントとは別枠ではありますが、「心掛け」として普段から実践しやすいのは嬉しいところです。



 

4.韓非子 ― 強者の人間学

オススメ度:★★★★☆


教養系(?)なのかもしれませんが、以前から読んでみたいと思っていた韓非子です。韓非子の解説本は何冊かありますが、以前受講していた「gacco」の「中国古典に見る指導者の条件」の講義をしていた SBI大学院大学の守谷 洋教授の本をチョイスしました。


韓非子は中国戦国時代末期の法家である韓非の書で、乱世を生き抜くために君主の権力を法によって強固にすることで国を統治しようと訴える組織管理論であるとも言えます。

韓非の統治理論は、「法」(法律)、「術」(部下をコントロールするためにリーダーが身に着けるべき操縦術)、「勢」(権限)の三つを中核としています。「術」については、

  • 1.臣下の言い分を互いに照合して事実を確かめること
  • 2.法を犯した者は必ず罰して威信を確立すること
  • 3.功績を立てた者には必ず賞を与えて、やる気を起こさせること
  • 4.臣下のことばに注意し、発言に責任をもたせること
  • 5.わざと疑わしい命令を出し、思いもよらぬことをたずねてみること
  • 6.知っているのに知らないふりをしてたずねてみること
  • 7.白を黒と言い、無いことをあったことにして相手を試してみること

の7つを挙げており、トップは権力の要(賞罰の権限)を押さえ、黙って睨みを利かすのが最良だと説いています。

『韓非子』全篇を貫いているのは、徹底した人間不信の哲学である。人間を動かしている動機は、何か。愛情でもない、思いやりでもない、義理でも人情でもない、ただひとつ利益である。人間は利益によって動く動物である、というのが『韓非子』の認識であった。

といったようなフレーズが書中に何度も出てきますが、「利用者が利己的な行動をしてもそれがシステム全体としての利益に繋がる」というブロックチェーンの設計思想にも繋がる最新の考え方なのでは?と思ってしまいます。勝手な妄想ですが。。

全般的に面白い本なのですが、構成にやや疑問が残る(章の前後の関連性・繋がりに違和感がある)ので ★マイナス1としました。



 

5.これからのマネジャーの教科書

オススメ度:★☆☆☆☆


「ミドルマネジャーのための本」という触れ込みで、なかなか良さげな出だしの本だったのですが、買って損したとは言いませんが全く腹落ちしなかった本です。

グロービス経営大学院の院生へのインタビューからの実例分析なのでしょうが、主観的な分析に終始しているような印象を受けました。どこかで聞いたことのあるようなノウハウを言い回しを変えて並べただけの焼き回し本というイメージです。残念ながら私には響きませんでした。



 

教養・教育系

6.あらためて教養とは

オススメ度:★★★★☆


一昨年、教養とは何か?というのをふと考えて二冊ほど本を読んでみたのですが、釈然とせずに残っていたモヤモヤがこの本を読んで霧消しました。


当時読んだのは以下の二冊です。
① 「おとなの教養」(池上 彰)
② 「ビジネスに効く最強の「読書」 本当の教養が身につく108冊」(出口 治明)

①では、教養とは「進歩の速い世の中にあっても陳腐化しないスキル」であり、「すぐに役に立つことは、世の中に出て、すぐ役に立たなくなる。すぐには役に立たないことが、実は長い目で見ると、役に立つ」と書かれています。つまり、「長い人生を生きていく上で、自分を支える基盤になるもの」というのが教養、という理論です。

②では、教養については「人間が賢くなる方法は、人に会い、本を読み、世界を旅すること以外にない」と書かれていて、読書については「読書は知識を得るためではなく、自分の頭で考える材料を得るためにある」と書かれています。読書で考え方の幅を広げる訓練をすることで教養が磨かれるということでしょうか。

「学問、知識などによって養われた品位」という国語辞典的な意味をなぞっているだけで、何だかモヤモヤが残りますよね。


そして「あらためて教養とは」では、「自らを立てるために必要なのが教養」と書かれており、「自らを立てる」とは「揺るがない自分を創り上げる。自分に対して則(規矩)を課し、その則の下で行動できるだけの力をつける」と説明しています。なお「規矩」については、「自分独りに課したものでありながら、自分の生きる社会との関係の中で、自らと社会の協調関係の中で、見出し、自分に課していくべきもの」としています。また教養は、ドイツ語での「Buildung」が意味的に近いとし、がっちりとした基礎の上に自分という人間をきちんと創り上げていくことだと述べています。

また、「分別」というキーワードが本書に何度も登場しますが、以下の説明が分かりやすかったです。

分別(ふんべつ)のある人というのは具体的にどんな人のことをいうので... - Yahoo!知恵袋


ここで、私の「教養」に対する理解を図式化したものが以下になります。

f:id:akiyoko:20180104040316p:plain


ハイ、全然分かりませんよね(笑)。少し説明すると、本書にも書かれている通り、教養の最低限のベースは「人間としてのモラル」です。自分をきちんと律した上で、そこに幅広い知識や経験を乗せ、それを自分なりに咀嚼・吸収して分別を育てていき、いずれ揺るがない自分を自立させていくといった構図になっています。知識や経験は「栄養」、育てていくべき分別が「幹」というイメージです。自分の中では非常にスッキリしたのですが、全然スッキリしないという方は是非本書を読んでみてください。



 

7.自分を成長させる 最強の学び方

オススメ度:★☆☆☆☆


表紙だけ見ると脳科学者の茂木健一郎さんの本に見えますが(笑)違います。オンライン学習サービス「gacco」の前社長の本です。

学びの真の目的は「自分のアイデンティティを確立すること」であり、学び続けるためには、

  • 費用負担が軽くて
  • 距離・時間の自由が効き
  • モチベーションが維持できる

という学び方を選択するのがよいとの前置きがあり、それら全てを満たしている「gacco」(「モチベーションの維持」はディスカッションボード上の「学び合い教え合う」コミュニティ)で学びましょう、という宣伝本です。


学びとは「社会を知り、自分を知って、社会に自分の力がどう活かせるかを見つけ出すこと」という意見には同意ですが、結局、タイトルの「最強の学び方」って一体何?という疑問符が残ります。個人的には、学びには3つ目の「モチベーションの維持」が非常に重要だと考えていますが、「学び合い教え合う」だけでモチベーションが湧いてくるようなそんな簡単なものではないんじゃないかなと思います。勉強そのものが「楽しい」と思える人は少ないと思いますし、だからこそ、「学びの先に何があるか?(学ぶことで何が得られるのか?)」が想像できないとモチベーションの維持は難しいと考えています。「学習とは、入力(感覚)と出力(行動)が結びつくこと」というのは、まさにそういう意味だと思います。


あと細かい感想としては、

  • 目新しいことが書いていない(どこかで聞いたことがあるような話が多い)
  • データが示されてないので信憑性、根拠が乏しい

という感じでした。




 

データ分析系

データ分析系としては、昨年は「PythonユーザのためのJupyter実践入門」などの技術系の本も読みましたが、一般の読み物としては以下の一冊のみです。

 

8.「原因と結果」の経済学 ――― データから真実を見抜く思考法

オススメ度:★★★★★


因果推論の入門の入門書。ビッグデータ時代を生き抜くためのスキルとして、データ分析だけでなく、「データ分析の結果を解釈するスキル」を身に付ける必要があるとし、その一つとして、因果関係と相関関係の違いを理解し、原因と結果に本当に因果関係があるかを考えるトレーニングをすることで、思い込みや通説にとらわれない正しい判断が出来るようになると説いています。


共著者の中室牧子氏は二年前に読んだ「「学力」の経済学」を執筆していますが、その本が面白かったということもあってこの本を読み始めました。

akiyoko.hatenablog.jp


前著と同じく読みやすく、取り扱っているテーマも非常に面白いです。
経済学者で「とくダネ!」にも出演している安田洋祐氏のブログの書評でも、

データ分析に欠かせないこの因果推論を驚くほど分かりやすく解説・紹介した、現代の新教養の画期的な入門書


『「原因と結果」の経済学』が分かりやすい3つの理由 : ECONO斬り!!

と書かれている通り、取っ付きにくい因果推論に特化した本でありながら、読者が挫折しないようにいわゆる教科書的な込み入った説明や小難しい数式を使わずに、データ分析の現場での最先端の手法を紹介しています。

経済学では特に、因果関係を示唆する根拠のことを「エビデンス(科学的根拠)」と言い、「回帰分析」や「自然実験」「疑似実験」よりもエビデンスレベルが高い因果推論の理想形として「ランダム化比較実験(RCT:Randomized Controlled Trial)」が存在し、複数のランダム化比較実験を統合した「メタアナリシス」がエビデンス・ピラミッドの頂点に位置しているという構図は、日本ではまだ馴染みがないでしょう。


最後に、因果関係を読み解くための因果推論の5つのステップは以下のようになっています。

  • 1.「原因」は何か?
  • 2.「結果」は何か?
  • 3.3つのチェックポイントを確認
    • まったくの偶然ではないか
    • 交絡因子(第三の変数)が存在しないか
    • 逆の因果関係は存在しないか
  • 4.反事実を作り出す(「もっともらしい値」で置き換える)
  • 5.比較可能になるように調整



 

自己啓発系

自己啓発本は最近はあまり読まないようにしていたのですが、タイトルが気になったりしてついつい読んでしまいます。

 

9.SOFT SKILLS ソフトウェア開発者の人生マニュアル

オススメ度:★★★★☆


この本は、「ソフトウェア開発者の人生マニュアル」という副題の通り、ソフトウェア開発者の生活を豊かにするための指南書です。

「キャリア」「自分自身のマーケティング」「学び方」「生産性を上げる方法」「お金(に働かせるという考え方)」「健康をハックする方法」といった幅広い分野について具体的な実践方法を紹介しています。ソフトウェア開発者のために特化した本というよりは、著者のキャリアがソフトウェア開発者だったということで、著者自身の経験から「これは人に勧められる」と考えた方法を惜しみなく紹介しています。実践方法が具体的なので今すぐ始めようという気持ちになれますし、実際すぐに始められることが多いです。私もスクワットから始めてみました(笑)。

前半は他のソフトウェア開発本にもよくある感じであまり響かなかったのですが、後半のお金の話や健康ハックの章はグイグイ引き込まれました。開発者向けの本としてはあまり出てこない新鮮なテーマだったからでしょうか。

意識高い系のおっさんが読んでも面白いですが、学生や20代のプログラマ、SEが読むと非常に有益かと思います。



 

10.やりたいことをやれ

オススメ度:★★★☆☆


本田技研工業(ホンダ)の創業者、本田宗一郎氏の本。家の近くに工場があったのと、タイトルに釣られて何となく手に取りました。パナソニック創業者の松下幸之助氏の「道をひらく」が好きで何度も読み返していて、それと同じように人生の教訓が読めるのかと勝手に想像していたのですが、全く違いました(笑)。この本はエッセイ集で、タイトルもその中の特徴的なものを単にチョイスしただけのようで、本全体を貫くテーマでは無かったようです。うーん、紛らわしい。。

ところで本田宗一郎氏は、「頭に閃いたアイデアを実証せずにはいられない」という根っからの技術者のようです。物作りに対しては、創意、工夫、失敗を恐れない勇気が必要で、中でも特に重要なのが弾力性のある見方、物の考え方であり、アイデアであると説く一方、人間関係については、「礼儀は人間の基本」「結局は人柄」「他の人の立場、気持ちを考える」など人間愛に溢れる考え方を持っています。

また、

人を動かすことのできる人は、他人の気持ちになれる人である。そのかわり、他人の気持ちになれる人というのは自分が悩む。自分が悩んだことのない人は、まず人を動かすことはできない。

こちらが望んでいること、こうやりたいと欲していることをスムーズに受け入れてもらうためには、まず、先方の心を知らねばならない。相手の気持ちを知って、相手が理解しやすいようにもっていかなければ、心からの協力は求められないからである。

人間にとって大事なことは、学歴とかそんなものではない。やはり他人から愛され、喜んで協力してもらえるような、徳を積むことである。そしてそういう人間を育てようとする精神なのではないだろうか。

いうまでもなく、人間関係を支えるものは相互の愛であり、信頼であり、尊敬である。私はこれをひっくるめて一言でいえば、秘密を守ることだと思う。なぜかといえば、(中略)秘密を守るという行為の中に、その人の人格の要素となっているさまざまな精神的なものがにじみ出ていると思うからである。お互いに秘密を持ち、守りあう量で、人間関係の質が判断できると思う。

などといった一節は、デール・カーネギーの「人を動かす」にも通ずるものがあって面白いなと感じました。



 

11.エッセンシャル思考 最少の時間で成果を最大にする

オススメ度:★★★☆☆


エッセンシャル志向とは何か?を簡潔に表した模式図が以下になります。「より少なく、しかしより良く」を追求するために、努力の方向を絞ったのが右側の図です。

f:id:akiyoko:20180104113356p:plain:w500

「全部手に入れよう」「全部やろう」とすると本質を見失ってしまう、自分で選べない人は他人の言いなりになる、だから自分で優先順位を決めなければいけない、というのは耳の痛い言葉です。

中途半端なイエスをやめて、「絶対やりたい!」か「やらない」かの二択にしよう

は、大胆ですが本質を突いた究極の判断基準になるでしょう。

全体的に分かりやすく書かれていて、内容に特に違和感は無いのですが、もっと手短に書かれていてもいいかな(冗長すぎる)と感じたので、★をマイナス1しました。



 

投資系

SOFT SKILLS ソフトウェア開発者の人生マニュアル」で投資について書かれていたのを機に人生で初めて手を伸ばしてみた分野です。全然分からない分野なので、気になった本を手当たり次第読んでみたというのが実情です。

 

12.株で富を築くバフェットの法則 ――― 不透明なマーケットで40年以上勝ち続ける投資法

オススメ度:★★★★☆


株式投資で巨万の富を築いた伝説の投資家、ウォーレン・バフェットの半生を描いた一冊。投資の神様と言えば「バフェット」というのは聞いたことがあったので、投資の勉強をするならバフェットの本を何か一冊読んでみようと考えて辿り着いた本です。

バフェットの投資哲学は一貫していて、「簡単に理解できる事業を行っており、5年・10年・20年先にきっと今より大きな利益を上げていると思われる企業の株式を納得できる価格で買うことが投資家の目標」と本人がレポートに書いた通り長期投資をメインとし、景気や企業業績が不調のときに買うことを最良としています。ちなみにバフェットが経営するバークシャー・ハサウェイの業績は、過去50年間(1965~2014年)の平均年利(複利)で約20%という驚異的な数字を上げているとのこと。初年度に100ドル投資していれば、50年後に7万5000ドルを超えるリターンが得られる計算になります。
ウォーレン・バフェットの驚くべき収益成果 | 先進国インデックス投資が最強だと証明する岩崎ブログ


バフェットの投資手法と言えば「バリュー投資」(実際の価値よりも割安に放置されている株を購入して本来の価値で売却する)で有名ですが、その手法に大きく影響を与えたのが、「安全なマージン」という銘柄選別法を提唱したベンジャミン・グレアム、「収益性と優れた経営者が大事」とし「理解できるものに絞り込んで投資する」というフィリップ・フィッシャー、割安でなくても良質な企業を買うチャーリー・マンガーだといいます。それについて、

グレアム、フィッシャー、マンガーへのバフェットの思い入れはよく理解できる。グレアムがバフェットに「安全なマージン」という投資の基礎を与え、感情のコントロールを教えた。フィッシャーによって、バフェットの手法は洗練され、長期投資のよい対象を見極めて集中的に投資する方法が与えられた。マンガーは、優れた事業を保有することで大きな利益がもたらされることや、投資判断で陥りがちな心理的な失敗について教えてくれた。バフェットの投資判断について、その意図をどう解釈するかでしばしば混乱が起きるが、3人の教えの組み合わせがバフェットだと考えると、その誤解は解けるだろう。

と著者は書いています。


そのほか、バフェットの考え方や人となりを知る上で非常によくまとまった本になっていると思います。バリュー投資、長期投資を戦略にしている人であれば鉄板本ではないでしょうか。なお、よく耳にするバフェット語録をまとめて読みたければ、下に挙げた「1分間バフェット」などがオススメです。



 

13.1分間バフェット お金の本質を解き明かす88の原則

オススメ度:★★★★☆


投資の神様とも称されるウォーレン・バフェットのいわゆる金言集。
「価格とは、買う時に支払うもの。価値とは、買う時に手に入れるもの」
「投資で重要なのは、自分でルールを考えることと、それを破らないこと」
「リスクとは、自分が何をやっているかよくわからない時に起こるもの」
「他人が貪欲になっている時は恐る恐る、まわりが怖がっている時は貪欲に」
などなど、シンプルでありながら深いフレーズを88個集めた一冊です。

バフェットがどんな人でどんな投資手法を取ってきたかを知った上で読むと有益と思われますので、先に紹介した「株で富を築くバフェットの法則」を合わせて読むことをオススメします。合わせて読む前提で ★★★ からプラス1で。



 

14.生涯投資家

オススメ度:★★★★☆


ニッポン放送株のインサイダー取引(村上ファンド事件)で世間を騒がせた、いわゆる「もの言う株主」村上世彰氏の波瀾万丈な半生を描いた自叙伝です。阪神電鉄の買収劇や 2006年の逮捕は一体何だったのか? が語られています。

その他、子供の頃のエピソードや氏の投資信念なども書かれていて、それだけでも読む価値があります。

企業とその経営者にとって、上場には二つのメリットがある。ひとつは、株式の流動性が上がること。すなわち、株式が換金しやすくなることだ。もうひとつは、資金調達がしやすくなることだ。逆に言えば、この二つが必要ない場合には上場する必要もない、と私は考えている。

私の投資は徹底したバリュー投資であり、保有している資産に比して時価総額が低い企業に投資する、という極めてシンプルなものだ。

投資家として大事なことは、失敗したと気が付いた時いかに素早く思い切った損切りができるか。下がり始めたら売る決断をいかに速やかにできるか、ということだ。それによって、失敗による損失を最小限に止めることができる。

期待値一・〇を超えないと、金銭的には投資する意味がない。この「期待値」を的確に判断できることが、投資家に重要な資質だと私は考えている。

「期待値」のほか、私が投資判断を行なうにあたって重要視している指標がIRR(内部収益率、InternalRateofReturn)だ。手堅く見積もっても、IRRの数字が一五%以上であることが基準となる。

投資につきものであるリスクを査定する際には、定量的な分析よりも定性的な分析が重要なポイントとなる。数字や指標の判断よりも、経営者やビジネスパートナーの性格や特徴を摑むことだ。


事件の真相については、この自伝があくまで村上氏側の主張になっているので果たして真実が何だったのかは私には判断できませんが、当時のメディアから受けたイメージは一変しました。しかしながら、全ては「コーポレート・ガバナンスとその浸透による資金循環の促進こそが経済成長を促す」という想いから、というのはあまりにも良く書かれ過ぎているんじゃないか感も否めません。氏の締め括りのフレーズをどう感じるかは、読者次第です。

私は多くの批判を受けてきた。その原因として、自分の信念を信じ、その信念に自信を持ちすぎて、早急に物事を進めすぎた場面があったことも、今になって振り返ると否定できない。しかし、その方法論や私の言動に賛否はあっても、私が目指してきたことは常に「コーポレート・ガバナンスの浸透と徹底」であり、それによる日本経済の継続的な発展である。


現在は半リタイアしてシンガポールに在住しているという村上氏ですが、Yahoo!ニュースの特集記事に氏の近影が載っていました。あの頃からだいぶ老けたなぁ、という印象です。

「日本郵政は外資が買えばいい」―― 再始動の村上世彰氏が語る - Yahoo!ニュース



 

15.お金の流れでわかる世界の歴史 富、経済、権力・・・はこう「動いた」

オススメ度:★★★★☆


意外というか(笑)予想以上に面白かった一冊。一気に読み終えました。
知っている人からすれば当り前のことなのかもしれませんが、歴史に疎い私としてはいつかもう一度読み直したい本です。


お金が歴史を大きく動かしていた、そして歴史は繰り返す、というのは示唆的で興味深いです。

国の盛衰というものには、一定のパターンがある。強い国は、財政システム、徴税システムなどが、しっかりと整っている。そして国が傾くのは、富裕層が特権をつくって税金を逃れ、中間層以下にそのしわ寄せがいくときなのである。だから国を長く栄えさせようと思えば、税金を逃れる「特権階級をつくらないこと」だといえる。
現在、タックスヘイブンなどにより、世界的規模で特権階級が生じている。ということは、世界的な規模での「国家崩壊」が近づいているのかもしれない。


 

その他

 

16.予想どおりに不合理: 行動経済学が明かす「あなたがそれを選ぶわけ」

オススメ度:★★★★★


この本は昨年読んだ本の中で一番面白かったです。
一昨年読んだ「フリー」の中にも登場していましたし、経済学者で東大名誉教授の伊藤元重先生の「ビジネスエコノミクス」の反転授業に参加したときにも話題に上っていたので結構有名な本なのかなと思ったら、ニューヨーク・タイムズのベストセラーリストに載ったほどの本だとか。著者のダン・アリエリーは現在デューク大学で心理学と行動経済学の教授職を務めており、過去には TED で何度かプレゼンテーションをしたこともあるようです。 *1


ひと言でこの本を説明すると、

わたしたち人間は、従来の経済学の見方からすると、ちっとも合理的でない行動ばかりとっているらしい。本書でも、人間の行動や決断がいかに不合理かを示す興味深い実験がいくつも紹介されている。けれども、著者がこの本全体を通じて主張しているのは、その不合理さには規則性があって予想することができ、だから解決策もある、ということだ。

という訳者あとがきの通りなのですが、行動経済学の入門書として、自ら行った実験結果や多彩なエピソードを交えて、楽しく分かりやすく解説してくれています。またその解決策としては、著者の言うように、我々の行動に規則性のある予想できる形で影響を及ぼす力(感情、相対性、社会規範など)を過小評価したり無視したりせず、我々の脳がそれらに何らかの影響を受けていると認識することで失敗を回避できるとしています。

「本当に求めているものではないのに『無料!』となると不合理に飛びつきたくなるのはなぜ?」など、日常生活でよく見かけるテーマが散りばめられていて面白く、「へえ」と頷くことしきりの一冊です。




 

17.1日ひとつだけ、強くなる。世界一プロ・ゲーマーの勝ち続ける64の流儀

オススメ度:★★★★☆


面白かったです。5年ほど前に「勝ち続ける意思力」を昔読んだのですが、より一層密度が増したように感じました。

「勝ち続ける意思力」を読んだ - akiyoko blog


まずは、「排水の逆転劇」と呼ばれる Evolution 2004 決勝戦の動画を見てください。

この派手な逆転劇に、日々の弛まぬ努力、追い詰められても焦らず判断力を乱されない心の鍛錬、卓越した大局観が凝縮されています。


たかが格闘ゲームと言えどトップの世界で勝ち続ける人の言葉は、ビジネスや人生にも通じる教訓として捉えることもできますが、世の中全体の競争が一段と激しくなりつつある中でこれらの言葉がさらに輝きを増しているようにも感じます。梅原氏も格闘ゲームのプロは真面目にさえやっていれば生きていける世界ではない、自ら積極的に成長していける人だけが勝ち残れると語っていますが、我々のビジネスにもこういった思考力や精神力がますます必要になってくるのでしょう。

もし勝ちたいのであれば、自分ではどうにもならないことに感情を動かされないよう努力したほうがいい。

勝負において自分の戦い方を崩してしまうのは、最も避けるべきことのひとつだ。僕が大切にしているのは、同じ負けにしても感情的にならずに、自分の戦い方のまま負けるということ。感情に呑まれず、自分のやるべきことをしっかりやることが最優先だ。勝ち負けはその結果でしかない。自分の戦い方を保ってさえいれば、ミスがミスを呼ぶことがない。逆転につながる可能性も出てくる。


また、リスクや投資についても鋭い考え方も持っています。リスクを恐れず前に進むには、大局観が必要とのこと。

弱い人というのは目先の損が我慢できない。状況を考えず感情で前に出てしまい、自分のリズムを崩すきっかけを作ってしまう。当然、結果も出ない。

行動力のない人には、共通点がある。特徴のひとつは、「リスク」と捉えるものが多すぎること。「あれも損」「これも損」と考えている。目先の少し損、他人の目、ちょっとした手間なんかが気になって、行動に移せないのだ。

どういうコンセプトで臨むかによって、思考の流れは変わってくる。大局観を持っていれば、ここまでは失敗できる、という線がだいたい見えてくる。大きな目で見れば、少しの失敗がリスクでもなんでもないことが分かってくる。自然と、行動力が出るようになるものだ。

大局観があれば、大きく行動できるようになる。別に正しい視点を持とうとしなくて構わない。大切なのは「仮にこういう視点はどうだろう」と考えて、その視点に沿って行動すること。自分の自由を広げることだ。

投資として、動くことのポジティブな面を考えるのが強いプレイヤー。リスクとして、動くことをネガティブに考えるのが弱いプレイヤー。


「大局観」と言えば、最近、国民栄誉賞の受賞が決定した羽生善治竜王の本「大局観 自分と闘って負けない心」を4年ほど前に読んだことを思い出しました。(現在は47歳ですが)40歳を過ぎてもさらに積極的にリスクに向き合えるようになったという変化は、大局観の賜物ということになるのでしょうか。勝負の世界に生きる最前線の人たちが同じような境地に辿り着いているというのは大変興味深いです。

《過去記事》
akiyoko.hatenablog.jp


私も大局観を意識して持つようにし、日々の変化をチャンスと思えるようにしていきたいです。




 

18.キャッチコピー力の基本 ひと言で気持ちをとらえて、離さない77のテクニック

オススメ度:★★☆☆☆


どこかで見たことのあるようなキャッチコピーのノウハウをまとめたもの。すぐに使えるようなテクニックもあり、まとめてあるので読みやすいのですが、薄いカルピスを飲んでいる感じが否めません。

コピーやライティングに関する本であれば、以前に読んだ「究極のセールスレター」の方が面白かったです。




19.雑談のトリセツ: 会話が楽しくなる!

オススメ度:★★☆☆☆


雑談がとにかく下手なので、読んでみた一冊。
ちょっとした時間に気軽に読み終えられるくらいに薄い本です。

内容については、一瞬「こんなの当り前」と思ってしまうのですが、こういう当り前が出来ていないから雑談が下手なのでしょうね。

以下、気になったところを抜粋。

  • 原則1:「話す内容を思いつきやすい」内容を喋る
  • 原則2:「思いついた内容を話しやすい」環境を作る
    • 相槌を打ち、質問をする
    • 相手が話し手のときは自分は聞き手に回る
    • 話の中に自分のことを交える
    • お互いによく知っている話題を選ぶ
    • 適度に感情が動いた話題を探す(楽しかったこと、ほっとしたこと、恥ずかしかったこと、嬉しかったこと)
    • 相手を不安な気持ちにさせない(落ち着いた態度、相手の話に興味を持っているような態度)
    • 相手に好かれるようにする(挨拶、話を聞くときには目を見る、相手の名前を会話に混ぜる、ねぎらいや感謝の言葉を掛ける、相手の話した内容を覚えておく)

2017年の akiyoko blog 振り返り

明けましておめでとうございます。
勝手に恒例にしていますが、昨年(2017年)の akiyoko blog を振り返っておきたいと思います。

f:id:akiyoko:20180102031254p:plain


ちなみに 2016年の振り返りはこんな感じでした。

<過去記事>
akiyoko.hatenablog.jp



2017年の akiyoko blog 振り返り

昨年一年間にアップした記事の本数は 37本でした。約10日に一本のペースです。

2014年をピークに 77本(2014年)→ 59本(2015年) → 44本(2016年) → 37本(2017年)と記事数が少しずつ減っていますが、アウトプットをサボっている訳ではなく、年々忙しくなっているというのもありますし(面倒なので正確な数字は測っていませんが)一記事あたりのボリュームが増えてきているようにも感じています。


全 37本中、Python 関連の記事が 14本で全体の約4割というのは前回とほぼ変わらず。しかしながら、13本と多かった Django 関連の記事は 2本に減り、代わりに pandasScrapyJupyter などのデータ分析関連の記事が増えました。


大きな変化と言えば、ブロックチェーン仮想通貨 関連の記事が増えたことでしょうか。昨年は社外の勉強会に20回参加し、その内 18本(*1)を記事としてアップしたのですが、その半数ほどがブロックチェーン、仮想通貨関連の勉強会でした。「fin-py もくもく会」には4回、「ビットコインとか勉強会」には5回も参加していました。特に fin-py は自分のやりたいことをいろいろ試せるので、来年も積極的に出ていきたいです。


ブログ記事ごとのアクセス数ランキング(akiyoko blog 2017年)

記事ごとのアクセス数ランキングです。2017年内のアクセス数(*2)ランキング上位 30本をリストアップしています。

なお昨年中に書いた記事 37本中、30位以内に入ったのは 9本でした。 *3


# 昨年比 タイトル 作成日 ポイント
1 まだ CSV の文字化けで消耗してるの?(Excel で直接開いても文字化けしない CSVファイルを Python3 で作成するスマートな方法) - akiyoko blog 2017/12/09 507.2
2 「プロジェクトマネージャ試験」に一発合格するための三か条 - akiyoko blog 2014/10/26 152.0
3 Git で コミットを無かったことにする方法 (git revert の使い方) - akiyoko blog 2014/08/21 71.9
4 IPA「情報セキュリティマネジメント試験」に一夜漬けで合格するためのたった二つの勉強法 - akiyoko blog 2016/11/17 66.6
5 あなたのパンダ(pandas)止まってませんか? 〜 Bokeh と ipywidgets でインタラクティブ Jupyter のススメ - akiyoko blog 2017/12/22 63.8
6 Python でリストのソートまとめ - akiyoko blog 2014/09/26 59.7
7 AppStore 登録前の iOSアプリを Ad-Hoc で配布してインストールする方法 - akiyoko blog 2014/08/23 48.8
8 Video.js を使って HLS形式の動画をストリーミング再生する - akiyoko blog 2015/08/11 46.4
9 pandas.DataFrame の列の抽出(射影)および行の抽出(選択)方法まとめ - akiyoko blog 2017/04/03 44.1
10 「一対一」「一対多」「多対多」のリレーションを分かりやすく説明する - akiyoko blog 2016/07/31 40.7
11 Open BroadCaster Software (OBS) で YouTube ライブストリーミングを使った動画配信をする方法 - akiyoko blog 2016/01/26 38.3
12 PyCharm のオレオレ最強設定 - akiyoko blog 2017/03/10 30.4
13 Python で Selenium WebDriver を使ったブラウザテストをする方法 - akiyoko blog 2014/04/29 25.9
14 iMovie の設定あれこれ - akiyoko blog 2016/02/01 24.5
15 Windows で R(統計解析ツール)を使う - akiyoko blog 2014/11/07 18.9
16 「Python 3 エンジニア認定基礎試験」に合格しました! - akiyoko blog 2016/12/21 18.1
17 Apple Developer Program の有効期限が切れてしまったときの対処方法 - akiyoko blog 2015/11/13 17.6
18 Mac の MySQL クライアントに「Sequel Pro」を使っているなら PostgreSQL クライアントは「PSequel」がオススメ - akiyoko blog 2016/07/29 14.6
19 Pythonのself - akiyoko blog 2012/06/27 14.1
20 見よ!これが Python製の WordPress風フルスタックCMSフレームワーク「Mezzanine(メザニン)」だ! - akiyoko blog 2015/12/23 14.0
21 初心者がプルリクまでに覚えるべきたった 9つの厳選 Gitコマンド - akiyoko blog 2014/12/02 13.7
22 まだ Moodle で消耗してるの? オープンソースの Python製 LMS「RELATE」が圧倒的にカスタマイズしやくてヤバイぞ! - akiyoko blog 2017/12/19 13.1
23 jQuery で Ajax を使ってみる - akiyoko blog 2014/07/21 12.7
24 ビットコイン・仮想通貨・ブロックチェーンの本を合計10冊読んだのでオススメ本を紹介 - akiyoko blog 2017/12/18 12.6
25 Python, Django 界隈の単体テスト事情(unittest / nose / django-nose) - akiyoko blog 2015/01/01 12.3
26 Open BroadCaster Software (OBS) の設定あれこれ - akiyoko blog 2016/01/23 12.2
27 matplotlib のグラフに日本語を表示する方法(文字化け対応) - akiyoko blog 2017/04/11 12.1
28 Pythonで単回帰直線 - akiyoko blog 2013/06/16 12.0
29 Pandas の DataFrame の基本的な使い方 - akiyoko blog 2017/03/27 11.9
30 pandas.DataFrame で時系列データの手習い - akiyoko blog 2017/04/10 11.5



#1 の「まだ CSV の文字化けで消耗してるの?(Excel で直接開いても文字化けしない CSVファイルを Python3 で作成するスマートな方法) - akiyoko blog」は、「python Advent Calendar 2017 - Qiita」の一記事として書いたものですが、公開して丸一日以上経ってから はてなのホットエントリー(テクノロジー) に出始め、そこからアクセスが瞬間的に伸びたのが要因です。結局、400 以上ブックマークされました。「文字化け」がプログラマを悩ま続ける共通のテーマだったからというよりも、「悪循環画像ジェネレータ」で作った図がウケたんじゃないかなと勘繰っています。


f:id:akiyoko:20180101182840p:plain:w400



全体的に Python 系の記事がアップしているのは、機械学習やデータ分析を扱うための中心的言語になっているなど、Python への注目度が上がっている表れなのかもしれません。特に、30位までに4記事がランクインした「pandas」、12位にランクインした「PyCharm」など、こんなニッチな記事が本人の予想を大きく超えて読まれていることに驚きを隠せません。


akiyoko.hatenablog.jp




浮かばれなかった記事

前回も書きましたが、頑張って書いたのにアクセスが全然だった「浮かばれなかった記事」は以下になります。


オープンソースのブロックチェーン「Hyperledger Sawtooth」の調査記事。ほぼ 3万字の超大作ですが、何のインパクトも残せませんでした。。

akiyoko.hatenablog.jp


お手軽データ分析シリーズの三部作。3記事で 1万5000字超えです。
ちなみに個人的には Scrapy は結構使えるなと感じています。うまくデータが抜き出せた時の楽チン度は半端ないです。

akiyoko.hatenablog.jp
akiyoko.hatenablog.jp
akiyoko.hatenablog.jp




今年の目標

記事数の目標は特にありません。

今年は何かプロダクトを作っていこうと考えていますので、それに沿った記事をメモ代わりにアウトプットできればと考えています。

*1:某ECサイトの勉強会と FinTech LT大会&忘年会 については記事を書いていません。

*2:純粋な PV数ではなく、作成日からの日数で割ったポイントで算出しています。

*3:作成日のところを黄色く塗っています。