THUMBS SHIFT→

このブログは主に親指シフトを用いて書かれています

最近やったこと

結構ネタバレがある

読んだ本と見た映画

kindleでハヤカワセールやってるのでSFを読んでる。kindleやばい。いつでも読めるのでいつでも読むことが出来る。

夏への扉

夏への扉

猫の描写が良かった。飼ったこと無いけどあるある〜〜〜〜。てなった。

典型的なタイムトラベル物で、最後に伏線を全部回収していくのはやはり爽快。最後がハッピーエンドなので良い。頑張った後に金と女に恵まれる話っていいよね。

序盤はコールドスリープしか出てこなかったのでどうなるんだろうな〜と思ってたら途中からタイムマシンが出てきた。いやそれ最初からコールドスリープいらなかったのでは。

古典SFあるあるだけど、記述が冗長。刊行当初なら新鮮味があるだろう描写も、もはや現実の方が追い越しているので目新しさはない。

思弁系か娯楽系かでいうと圧倒的に娯楽系だったのでよみやすかった。

アメリカにアンクル・サムってふりがな振ってあるの格好良かったのでどこかで使っていきたい。

ソラリス (ハヤカワ文庫SF)

ソラリス (ハヤカワ文庫SF)

夏への扉と真反対の思弁系。最初の、お客さんの正体がわかるまではホラーとしてめちゃめちゃ楽しかった。わかってからは一気にSpeculative Fictionと化した。

ソラリス学はまぁ冗長だけど必要ではあると思う。あれのおかげでソラリスの特異性が強調される。

この本は様々な読み方をすることが出来る傑作SFというのが一般的な評価らしい。円城塔のいうところの、全てを説明しうるがゆえに何も説明できない概念というのを絡めてなにかもっともらしく論評しようとしたけどどうにもならなかったので辞めた。

スナウトとサルトリウスのお客さんは誰だったのかな。スナウトは動物っぽいと思う。

解説がちゃんと解説してて本当に良かった。解説とタイトルをつけてポエム書いてる著者まじで辞めてくれ。

帰ってきたヒトラー(字幕版)

帰ってきたヒトラー(字幕版)

  • 発売日: 2016/12/23
  • メディア: Prime Video

衝動的に見てみた。勿論原典ではないけど、再現されたヒトラーを見ていて、やっぱ演説が上手いんだなーとか思った。

序盤はタダのコメディで、後半にかけて雲行きが怪しくなっていくという展開も好き。

作中のヒトラー自身は何ら具体的な計画を語ってはいないけど、あまりに演説が上手いので自分の意見を代弁してくれている気がしてきた。

民主主義は国民の不断の努力によって維持されていかなければ行けないんだなぁというお気持ち。

本を読むのは良いけど、構造的に展開を把握できてないよなぁと思ったので読んだ。面白さを作るにはどんでん返しが必須というのは納得。あとは主人公の設定の仕方とか、敵の作り方とか。

純文学とか思弁SFとか、この本の解説から逸脱してるようなのもよくあるが、そういう小説を書くのはめちゃめちゃ難しいだろうな。

確定申告で悩んだので。街には沢山の店があるから開業は簡単そうに思ってたけど、実際は複雑だとわかった。あんなに店があることが信じられない。あと渋谷でどうやってテナント料払ってるのかわからない店だらけなの謎すぎる。

FGOでよく出てくるから読んだらいきなりアイアイエーイベ始まってびっくりした。読めば読むほど神が人間の味方だったことなんて一度もありませんよという気持ちになる。狂ってる?それ誉め言葉ね。

イアソンってすごい人なんだなとか、ヘラクレスは世界一強いんだから!とか、ゼウスカスすぎやろとか思うところが多い。あとはケルト神話北欧神話と日本の偉人とアーサー王伝説とインドと中国とその他諸々の物語を読まなきゃいけない......

ちなみにkindleで読んだけど固定レイアウトだったのが辛かった。

やってること

  • バイトを始めて病んでる
  • django+react+graphQLでSPA作ろうと思ってるけど、ルーティングとかデプロイとかセキュリティで詰まってる。
  • 運転の練習をしてる

poetryでnpm runしたいならtasks.jsonを使えばいいじゃない

pipenvは死んだからpoetryを使おうという記事を先日かいたけど、どうにもpoetryはpipenv runとか、npm runの代替となる機能がないらしい。 poetry runはあるけど、後ろのコマンドを全部手入力しなきゃいけなくて、poetry run <ユーザー定義スクリプト>はできない。

pyprojectにscriptsという設定があるけど、これはパッケージングのときに外部に提供するコマンドを指定する所らしくて、setup.pyentry_point=[console_scripts]みたいな使い方しかできないらしい。

実際、pyproject.scriptsにはpythonスクリプトしか指定できない。echoとかcdとか使えない。ロードマップを見ても、追加されそうな気配はない。

じゃあスクリプトを自作してしまおうというのが今回の主旨。前置きが長くなったけど、そんなに大したものではない。ツールはVSCodeのタスクランナーを使う。

VSCodeを開いて、Ctrl + Shift + pで設定を開く->Configure Taskで.vscode/tasks.jsonが作られる(多分)。

はじめに自分のtasks.jsonを載せておく。

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "runserver",
      "type": "shell",
      "command": "poetry run python ${cwd}/server/manage.py runserver",
      "presentation": {
        "reveal": "silent"
      }
    },
    {
      "label": "makemigrations",
      "type": "shell",
      "command": "poetry run python ${cwd}/server/manage.py makemigrations"
    },
    {
      "label": "migrate",
      "type": "shell",
      "command": "poetry run python ${cwd}/server/manage.py migrate",
      "dependsOn": ["makemigrations"]
    }
  ]
}

必須なのがlabel, type, commandで、他のはなくても良い。まぁ見ればわかると思うので詳しくはドキュメントを見てください。

今はDjangoの開発をしてるから、manage.py 関連しか無い。manage.pyは補完が効かないからまじで便利。

他にも便利機能としては${cwd}でルートディレクトリが取得出来る。他にも色々変数がある cwdだからcdしたら値変わるんじゃねとか思ったけどなんかルートディレクトリに固定されるみたい。動くからヨシ!

あとはdependsOnでタスクを連鎖させることができる。これでmakemigrations&migrateを一発で終わらせられる。

あとはこれをcommitすれば、vscodeならスクリプトを共有できる。

djangoのコマンドでbashの補完を効かせる

sudo curl -o /etc/bash_completion.d/django  https://raw.githubusercontent.com/django/django/master/extras/django_bash_completion
echo "source /etc/bash_completion.d/django"  >> $HOME/.bashrc

ソース

django-adminとmanage.pyの補完が効くはずなんですが、僕の環境だとmanage.pyでTAB二回押すとエラーがでました(笑)。まぁdjango-adminとmanage.pyは同じ働きをするらしいので、django-adminを使っていくことにします。

poetryこと始め

pipenv はもはや死んだ*1ので、poetry使っていきます。

インストール

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python です。

RuntimeWarningが出る場合

/root/.poetry/lib/poetry/_vendor/py2.7/subprocess32.py:149: RuntimeWarning: The _posixsubprocess module is not being used. Child process reliability may suffer if your program uses threads.  "program uses threads.", RuntimeWarning)

みたいなワーニングが出る場合があります。僕の環境*2では出ました。このまま使っても問題ないらしいので気にならない人は飛ばしてください。

これを消すには、

curl -O https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py
python get-poetry.py --uninstall
python3 get-poetry.py
vim $HOME/.poetry/bin/poetry

として、 #!/usr/bin/env python#!/usr/bin/env python3に書き換えます。これで僕は直りました。ソース

使い方

基本的にはnpm(yarn)と同じです。 pyproject.tomlpackage.jsonの役割を果たします。

一応説明しとくと、pyprojectにはインストールしたパッケージや、設定、独自コマンドなどを書くことができ、これがないと何もできません。

最初にやること

poetry init

で対話的にpyprojectを作ってくれます。Enter連打で最小設定のができます。もしくは-n (--no-interaction)オプションをつけても同じことになります。

パッケージのインストール

poetry add <pkg> -Dオプションでdevに追加されます。

環境構築

poetry install

これでpyprojectにあるパッケージを全部インストールしてくれます。 --no-devでdevは無視してくれます。

ちなみに、poetry.lockがあれば、完全に同じ環境を構築してくれます。pyprojectのみある場合は、インストールした後、poetry.lockを作ってくれます。poetry.lockはコミットすることが推奨されています。

仮想環境関連

環境の情報を表示したい時

> poetry env info

Virtual environment
Python:         3.7.1
Implementation: CPython
Path:           /path/to/poetry/cache/virtualenvs/test-O3eWbxRl-py3.7
Valid:          True

System
Platform: darwin
OS:       posix
Python:   /path/to/main/python

--pathオプションで、仮想環境のパスだけ表示できます。

環境を消したい時は poetry env remove /full/path/to/python です。

VSCodeに環境が認識されない

こういう時は、 poetry env remove /full/path/to/python で環境を消して、 poetry config virtualenvs.in-place true --local で環境をルートディレクトリに作るようにして*3poetry install~/.venvに環境が作られるので、VSCodeに認識されるようになります。

pipが壊れたので、パッケージを削除したら直った話

久しぶりにpython触ったら、Pipenvは開発が停止し(issue見る限り頑張ってはいるけど追いついてない印象。まだ開発やってる〜〜?^^ってのが5つは立ってる)、PoetryやPyflowとか言う新参者が幅をきかせはじめているとかいう、魑魅魍魎が跳梁跋扈している状態なので、「覇権決まるまでとりまpip使っトコ...」ってなったんだけど、そのpipが壊れていたので力技で直した(?)備忘録。

本記事にかかれている手順を実行していかなる損害が出ようとも補償できません。

#以下は当然失敗する
pip install hoge
pip uninstall hoge
pip install -U pip

#再インストールのスクリプトまで失敗する
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

エラーメッセージをメモるのを忘れたが、FileNotFoundErrorとかPermissionDeniedとか出てたと思う。最初は権限関係かな?と思ってsudo付けてやってみたが違うっぽい。

よくよくエラーメッセージを見てみると、あるパッケージの構成ファイル(egg.infoだったかな?)が無いのでエラーが出てるらしい。

pip uninstall hogeでアンインストールもできない。どうにか削除したいので、思い切ってsite-packages/以下を全部消したら直りましたというお話しです。

たぶんnodeで言うnode_modulesとおんなじような扱いな気がしないでもないから消しても大丈夫かなぁって感じ。

create-react-appを使ってるプロジェクトでGithub Actionsを使うときのポイント

create-react-appはnpm|yarn testしたときにデフォルトで--watch --onlyChangedオプションを付けちゃう。そのためGithub Actionsでテストすると、タスクが終了しないので、ハングアップしてテスト続行不可になる。

By default npm test runs the watcher with interactive CLI. However, you can force it to run tests once and finish the process by setting an environment variable called CI.

When creating a build of your application with npm run build linter warnings are not checked by default. Like npm test, you can force the build to perform a linter warning check by setting the environment variable CI. If any warnings are encountered then the build fails.

https://create-react-app.dev/docs/running-tests/#continuous-integration

そのため、環境変数にCI=trueを追加しなきゃいけない。ドキュメントでは「普通はCIはCIサービス側で設定されてるよ」って書いてあるけど、Github Actionsではまだっぽい。まだベータ版だからね。

name: CI

on: [push]

jobs:
  test:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
      - run: yarn install
      - run: yarn test
        env:
          CI: true

CIを設定すると、yarn buildでWARNが起きるとfailする。

環境変数の追加の仕方は他にもある。↓

help.github.com

ちなみに CI=true yarn testは勿論のこと、yarn test --watchAll=falseでもローカルで同じようなことが出来る。知らなかった。 f:id:arark:20191214084310p:plain こんな感じでテストが実行されます。おぉー。

大学の講義の耐えられない虚無みについて

私萩原!この春から大学一年生!

「いっけな〜い。遅刻遅刻〜」

大学「はいきた?遅刻遅刻遅刻遅刻出席削っとくね欠席欠席欠席欠席欠席欠席講義ドーンわかった?わかった?わかった?演習演習演習演習演習演習なんでわからないの?なんでなんでなんでなんでなんで締切です締切締切はい先進みます宿題ドーン出した?出して出して出して出して出して出して出して出して?わからない?じゃあ単位落とすねドーンドーンドーンドーン」

大学の講義、まぁ大体クソだけどみんな適当に受けて単位とって卒業すると思う。

それは別にいい。虚無だけど。教授も生徒もやる気ないなら別にいい。お互い適当にやってこ?ってなる。

ただ、自分は改善しねーのにこちらにだけ努力を求める講師、てめーはだめだ。

講義の耐えられない虚無さ。教育のプロフェッショナルでもない大学教員が質の良い講義なんてできるはずがなかった。

ここでいう良い講義とは、他の手段に比べて講義はこういう点で優れているから絶対に講義という手段を選ぶべきである、という積極的動機が見つけられるもの、としよう。

この基準をもとに大学の講義を見てみると、明らかにその価値が薄い。講師はだらだらと間延びした話し方をし、聞いていると馬鹿らしくなるほどにもどかしい。そのくせわかりづらいとこの解説は一足飛びで、理解しないまま次に行かざるを得ない。

こんな講義なら教科書を読んだほうが100倍ましだから!

もういいから自作の資料を作るな。教科書を使え。車輪の再発明をするな。そもそもそれ車輪じゃねーから。丸太ぐらいの代物だから。なぜわかりづらい資料を再発明するのか。おいばか自著で講義をするのをやめろお前の解説はわかりづらいと言ったばかりだろ。しかもこれ!演習の解答ないじゃん!(略)じゃねえよ馬鹿にしてんのか。おめえは未解明の問題ポンポン解いとんのか?

こういう輩は大体演習を「講義を聞かせるための道具」だと思っている。

ちがうから!生徒がお前の講義を聞かないのは聞く価値が無いからだから!それを減点方式の演習で動機付けするのは違うから!いくら演習を出して聞かせようとしても中身のない講義は誰も聞かないから!

こういう講義にe-learningを導入するともっと酷いことになる。講義の質は変わらないけど演習だけものすっごく増える。演習クイズアンケート演習演習宿題。e-learning全然改善に役立ってねえじゃねえかよ。いや俺らも聞く価値のある講義なら聞くからね。無理やりきかせようと仕向けてくるから俺は怒ってんだぞ???お??

ん?

講師「えらそうなことを言いやがって.....。貴様ら大学生はまじめに勉強してきたとでも言うのか?」

悟空「だから落とした……」

講師「俺が落としたんだ。大学生は何となく気に入らないんでね……」

f:id:arark:20191130142519j:plain

教養としての経済学 をよんだ

サイコパス3期でリーマンショックの話が出てきたので読んでみた。 唐之杜姐さんの安心感な。主人公組が自立してて常守とはちがうなぁって感慨に浸ったりしています。

ハードなSFを読むのに経済学とか金融とか、民族言語などなど広範な文系知識を要求されるのはよくあることで、むしろ魔法のように扱われる理系知識のほうがいらないということもある。

僕としてはSFで使える文系知識を求めてこの本を読んだのだけど、まぁ概ね期待に沿うような本だった。

本書は経済学部一年生に教授が伝えたいことを書いていくような形式を採っているので前提知識はあまりいらない。 興味のあるトピックとしては 1章のTPP,ギリシャ金融危機マイクロクレジット 2章のマーケットデザイン、中立命題、為替レートの決まり方 3章の貨幣鋳造 だった。 4章はつまらなかった…

文系学生向けに「なぜ数学を学ぶのか」という話題が何度も語られていて正直うざかった。本の想定読者的にしょうがないのだとは思うけども。

ハーモニーでは報酬系が時間に関して勾配が0になった完全に合理的な人類が描かれたけども(うろ覚え)、完全に合理的な人類が社会を形成するのはむずかしいんじゃないかなぁと思ってみたりしている。 ちなみに完全に合理的な人のことを経済人と言うらしい。 経済人だからこそ、初期条件が悪ければ、パレート効率の袋小路にはまって社会が硬直するのかもしれない。 一方で国家や民族がなくなるほど情報化されている近未来においてさえ情報の非対称性は(人間が体を持つ限り?)なくならないのでそれによって流動性が生まれるのかもしれない。

久しぶりに本読んだけど面白かったので続けたいな。

一体僕達はどのようにしてimmutable.js+TypeScriptの環境を運用すれば良いのか

JSクソだと言い続けてはや幾月、僕です。

モダン開発環境おじさん「React+Redux+Typescript+immutable.js環境は良いぞ。」

とはよく言われていますが、immutable.jsとTypescriptを併用しようとするとかなりめんどくさくなることに、取り返しのつかなくなった時点で気づくことがあるというのはあまり知られていません。

素晴らしくモダンなimmutable.jsがTypescriptと相性悪いなんてあるわけないやろwwwと僕も最初は思っていました。

では以下のオブジェクトを見てみましょう。

const o = {
    name: 'arark',
    playerId: '0001',
    level: 23
}

これを型付けするのは簡単です。

interface user {
    name: string
    playerId: string
    rank: number
}

じゃあこれはどう型付けしましょう

import { Map } from "immutable";
const m = Map({
  name: "arark",
  playerId: "0001",
  level: 23
});

そう。。。めっちゃ面倒くさいのです。そもそも自分で定義しなくても型推論してくれるもんだと思ってたし。 immutable.jsでは以下のような問題が発生します。

import { Map, fromJS } from "immutable";

// JSのオブジェクトの場合
interface user {
  name: string;
  playerId: string;
  level: number;
}
const o: user = {
  name: "arark",
  playerId: "0001",
  level: 23
};
const name_mutable = o.name //stringと推論される(型付けしなくても)
const level_mutable = o.level // numberと推論される(型付けしなくても)
const none = o.none // エラーになる

// 普通のimmutable.Mapの場合
const u = Map({
  name: "arark",
  playerId: "0001",
  level: 23,
});

const name_immutable = u.get("name"); //string | numberになる。stringと推定してほしい
const hoge_immutable = u.get("hoge"); //string | numberになる。エラーにしてほしい。

このように明らかにJSのオブジェクトとは異なる動きをします。幾つか解決策は見つかっていて 一つは自分でgetなどのメソッドの型定義をオーバーライドすることです。*1*2

interface User {
  name: string
  address: string
  phoneNumber: number
}

interface ImmutableMap<T> extends Map<string, any> {
  get<K extends keyof T> (name: K): T[K];
}

type UserMap = ImmutableMap<User>

const user: User = {
  name: 'yuki',
  address: 'tokyo',
  phoneNumber: 8108012345678
}
const userMap: UserMap = Map(user)
const n = userMap.get('name') // stringと推論される
const age = userMap.get('age') // エラー

これは期待した通りに動き、問題も無いように思えます。しかし他にもある setIn, updataIn, mapなどのメソッドを使っていくたび新しく定義しなければいけないと考えるとかなり手間です。

もうひとつは

blog.mayflower.de

にあるように

import {Map, List} from 'immutable';

type AllowedValue =
  string |
  number |
  boolean |
  AllowedMap |
  AllowedList |
  TypedMap<any> |
  undefined;

interface AllowedList extends List<AllowedValue> {}

interface AllowedMap extends Map<string, AllowedValue> {}

export type MapTypeAllowedData<DataType> = {
  [K in keyof DataType]: AllowedValue;
};

export interface TypedMap<DataType extends MapTypeAllowedData<DataType>> extends Map<string, AllowedValue> {
  toJS(): DataType;
  get<K extends keyof DataType>(key: K, notSetValue?: DataType[K]): DataType[K];
  set<K extends keyof DataType>(key: K, value: DataType[K]): this;
}

const createTypedMap = <DataType extends MapTypeAllowedData<DataType>>(data: DataType): TypedMap<DataType> => Map(data) as any;

などと複雑な型定義をすることです。

「ファック!!!!!!!!!!俺は開発をしたいんであって型定義をしたいんじゃんねえええええええええ」

というのは至極まっとうな意見であって、実際僕もそう思います。ここまでくるともはやimmutable.jsが開発の邪魔になってくることさえ有ります。

そんな悩みに対する回答を、私はstackoverflowの奥地で見つけました。

stackoverflow.com

この一文に注目してみましょう

we converted to immer and we don't want to look back.(中略)We are happy.

そう、わざわざimmutable.jsなんて使いづらいものを使う必要はなかったということをこのコメントは気づかせてくれました。

このTypescriptとの不親和は本家リポジトリでもつとに指摘されていることではありますが、以下のissueに見られるように、なかなか改善される見込みはありません。 Immutable.js is essentially unmaintained · Issue #1689 · immutable-js/immutable-js · GitHub immer.jsに乗り換える人も多いようです。

僕?僕は使いません。もはや戻れないところまで来てしまったからさ......

word死すべし慈悲はない

wordの悪口で一晩明かせるとうそぶく漢、僕です。レポートでoffice製品を強要されて腹がたったので悪口を書いていきます。そして東工大は工業大学を名乗るのをやめろ。

テキストファイルじゃない

もうこれが全にして一、一にして全。microsoft第二の失敗、ソフトウェア界のapple pencil(第一世代)、Magic Mouseの後継、最後に書き足された蛇の足、ネタバレ絵をRTするアホ、e-tax誕生の遠因などと言われています。ちなみにmicrosoft最大の失敗はwindowsです。全ての悪は.docxがバイナリファイルだということに起因しています。

エディタが選べない

テキストファイルじゃないのでエディタが選べません。これがプレーンテキストだったらどんなに良かったことか・・・。特にwordの数式記述は東工大の学内システムの如くクソなので、使っているうちに不満がたまり、レポートを書く気力がゴリゴリ削られていきます。

構造とデザインの分離ができない

wordは典型的なWYSIWYGエディターです。だから見出しを太字にしただけで見出しになったと勘違いしてる奴がいます。というかそういうやつしかいません。太字は!!!!!見出しじゃ!!!!!!ない!!!!!!! 見出しはアウトラインで階層的に表示される、メタ的に意味づけされた物のことを言うんじゃボケ!!!!!!!!wordでちゃんと階層的に文書を作ろうとすると、マウスとキーボードの往復でストレスしかたまりません。いちいち「新しい小見出しを作成」なんてクリックさせてんじゃね〜〜〜〜〜〜〜。

構造とデザインの分離が出来ないとどういうことになるかと言うと、「太字部分の書式一括で変えたいな〜」って思った時に出来ません。一つ一つ自分で書き換えていくしかありません。いやホントは出来るのかもしれん。でもそもそもテキストファイルであれば簡単に出来たことをわざわざ難しくしないでくれ。それにWYSIWYGだからコピペが死ぬほど無理。

wordで図形とかコピペしようとすると(そもそもテキストエディタで図形を書かせるなと言うのはある)大体崩れますよね? 自社製品のファイル間くらい!!!!!簡単に!!!!コピペ出来るようにしろ!!!!!

これがhtmlだったりmarkdownだったら<h1>#だけで見出しになります。表示を変更したかったらテキストじゃなくて出力プロセッサの方を変えれば良い。webで言えば、htmlじゃなくてCSSを変えればいい。html+CSSがwordだと思ってください。h1などのマークアップタグを使わずにpタグのインラインCSSのみで書かれた文書がwordです。どうです?クソエディタオブザワールドじゃないですか?

文を書く以外のことが出来てしまう

wordだと図形を書けます。アホか!!!!!なんでテキストエディタで図形書かなきゃいけないんじゃ!!!!!かけるんだったらちゃんと文の回り込みとか設定しやすくしろや!!!!文章の回り込み回避のために連打された改行のせいで何度レイアウト崩れに涙をこらえたか。

wordで図形が書けるせいで、一体どれだけの学生がコピペが出来ないことに悩まされたか課題をだす教授側はわから無いんでしょう。コピペ不可の表紙を使うことを強制してる電気電子系、お前やぞ。そして東工大は工業大学を名乗るのをやめろ。

数式記述がクソどころじゃない

wordで数式を書こうとします。 リボンから数式をクリック→上付き文字、下付き文字などの中から求める構造をクリック→数字を入れる。ギリシャ文字の場合リボンから選ぶ→更に複雑な構造の場合永遠ループ

う、う、うぜ〜〜〜〜〜〜💢💢💢幸いにして、wordでは一部のtex記法がサポートされています。ですがそもそもtexも書きづらいので、多少のストレスを緩和するだけで、やはりストレスが貯まるし、もはやtexで良いです。

gitで管理できない

別にgitじゃなくてもいいです。なんか一般ユーザに優しいVCSがあればそれでもいいです。いかに優れたVCSであろうとも、対象がバイナリファイルになってしまってはバージョン管理するメリットがなくなります。このせいでいくつreport_v1.docx, report_v1_rev.docx, report_v1_rev_checked.docxなんて言うファイルが生み出されたことか・・・。それはそれとしてdocxの改訂にはセマンティックバージョニング(的なもの)使えや!!!!!!

OSが限定される

Windowsを使っている人の8割は家族を人質に取られているというのは有名な話ですが、一部のレジスタンス(他OS)では実質wordファイルの編集が出来ません。できるだけwindowsと距離を置きたいことを主目的として生活している僕のような人にとってはエディタどころかOSも制限されるのはもはや人権侵害。macはどうなんだろう。あんまり不具合とか聞かないので最近は完全に互換性があるのかも知れません。

じゃあどうすればいいのさ

pandocを使いましょう。

qiita.com

ただこれでも完全じゃなくて、ギリシャ文字などが文字化けしてしまうことがあるので結局wordを使ってます。頼むからwordじゃなくてPDFもOKにしてくれ。

東工大は工業大学を名乗るのをやめろ。