Railsで既存テーブルにカラムを追加した後に順番を変更したかったが上手くいかなかった。schema.rbファイルに設定を書いてしまい、それで良さそうならマイグレーションファイルもそれに合わせて書き直そう(とりあえずの荒業)

Ruby on Rails5で、既存のテーブルにカラムを追加し、そのあとにカラムの順番を変更したかったのですが、上手くいきませんでした。
それでもどうにかカラムを調整してデータベースを構築するための方法です。

結論から言うと、「schema.rbファイルに直接、データ構造の設定を書いてデータベースに反映させて、それで良さそうならマイグレーションファイルを書き直そう」をいう内容です。

今回の手法はとりあえずの荒業(あらわざ)です。
ただ、Railsの書籍『Ruby on Rails5アプリケーションプログラミング』に「スキーマファイルによるデータベースの再構築の方法(P.316)」が書いてあるので、あながち間違っている訳でもなさそう。鋭意勉強中です。

カラムの追加はハマりポイントでした。

・既存のテーブルにカラム(列)を追加したい
・マイグレーションファイルを作って…と思いきや(うまくいかなかった例)
・マイグレーションファイルに設定を書いて変更するのは諦めてschema.rbファイルに設定を書こう
・新しく、更新した部分のマイグレーションを修正しておこう
・その他もろもろ何かを行う手段など
・役に立ったリンク等
・Herokuで上記のデータベースをコマンドラインで構築する方法

このような内容でお届けします。

ちなみに今回の方法は、変更するテーブルのデータは消えてしまうので、テーブルを1から作り直すのとあまり変わりません。

みなさん、どうやって上手くやっているのでしょうか。
テーブルのカラムの順番を変更したいだけでかなり一苦労でした。

続きを読む

Pythonのバージョン管理をPipenvにした話。Windows10ではPipenvがベストプラクティスな気がする。

どうも、りーずです。

・Windows10でのPythonのバージョン管理はPipenvが良い
・Pipenvを使えるようにする手順
・Pipenvの使い方

このような構成でお届けします。Pipenvは良いよ!というメモです。

pipenv --python 3.7
.venv/Scripts/activate
deactivate
pipenv install django==2.2
django-admin startproject プロジェクト名
django-admin startapp アプリ名
python manage.py runserver
pipenv lock -r > requirements.txt

今回実際に使うのは上記のコマンドです。


・Windows10でのPythonのバージョン管理はPipenvが良い

Windows10環境のPythonのバージョン管理でAnacondaを使ったり、Virtualenvを使ったり、素のPythonでpipを使っていたりしたのですが、最近はPipenvがDjangoなどの開発には向いているのではないかと思うようになりました。その理由を述べていきます。

最初はWindows10でAnacondaを使おうとしたのですが、使いたいライブラリがなかなか動かせなかったり、インストールの設定でどれがベストなのかが分かりにくかったり、pipコマンドと混ぜると良くない(?)などの情報があり、使わなくなりました。
一言でいうと初心者には難しいです。

その後、Udemyや海外のYouTubeのPythonの英語の動画を見ているとよく使われているvirtualenvを使っていました。

しかしvirtualenvはPythonのバージョンを切り替えられないという欠点がありました。
(Python3.6、3.7、3.8などを切り替えられない。)

そこで色々と調べた結果、Pipenvを使うと
・Pythonのバージョンそのものも管理(切り替え)が出来る
・個々のフォルダ内で環境を作り、アクティベートするとそのまま設定したものが使える

というように、やりたいことが出来る唯一のバージョン管理ツールでした。
これには非常に利便性を感じたので、Djangoなどのアプリケーションを作ったり、ちょっとしたプログラミングをするにはPipenvでいいかな、という結論になりました。

僕はAnacondaとの共存は諦め、とりあえずPipenvのみでやっていこうと思いました。

これらのツイートで貼っているリンクが参考にしたものです。


・Pipenvを使えるようにする手順

まず、使いたいPythonは、公式からダウンロードしてインストールしておきます。(重要)

Python3.8を使いたければそれをダウンロードしてインストール、Python3.7を使いたければそれをダウンロードしてインストール、という感じです。

Pythonのインストール先ですが、

C:\Python
というフォルダを作り、そこに

Python3.6.7の64ビット版は
C:\Python\Python367

Python3.8.5の32ビット版は
C:\Python\Python385-32

という感じに数字を割り振り、分かりやすいように名前をつけてインストールしていくと良いです。
Program Filesフォルダにインストールすると、空白でエラーになるような事があったので、気をつけましょう。

僕は、インストーラーでパスは通してインストールしました。
パスを通すと、『環境変数で一番上に来ているPythonのバージョン』がターミナル(コマンドプロンプト)のデフォルトになります。

・Pipenv(バージョン管理ツール)のインストール

さて、次はPipenvを入れなければいけません。

そして、これに限ってはPythonのどれかのバージョンに直接pipコマンドで入れる必要があります。
pipコマンドは
pip install ライブラリ名
で、PythonのライブラリをインストールできるPython公式のコマンドです。
ライブラリの管理に使います。

Pipenv(これもライブラリです)を入れるPythonのバージョンは、インストールしているPythonの最新のバージョンで良いと思います。

Pythonを入れているフォルダには「Scripts」という名前のフォルダがあり、どんなライブラリが入っているかを確認することが出来ます。

僕の場合は
Python3.8.5の32ビット版にPipenvを入れていました。

まぁどれに入れても大丈夫だと思います。
Pythonのパスが通っているものにしましょう。

「パスが通っている」という日本語は、「Windows10のシステム環境変数のPathという変数に、設定がされている」という意味です。これをすることにより、ターミナル上で、プログラム名を入れるだけでプログラムを実行することが出来るようになります。「Python」というコマンドが動くのも、「パソコン上のどこにあるpython.exeを動かすかが指定されているから」です。)

まずはどのPythonがターミナルで動いているか確認しましょう。

Python --version

そうしたら、ターミナルで

pip install pipenv

と打ち、Pipenvをインストールします。

・システム環境変数を設定する
次に、環境変数の設定です。ここがポイントです。

『プロジェクトのフォルダ直下にPipenvの仮想環境が作られてほしい』ので、
環境変数を設定します。

Windows10の環境変数に

PIPENV_VENV_IN_PROJECTという項目を作り、「true」という値を入れます。

以下の画像のようにします。

「システム環境変数」のなかに変数「PIPENV_VENV_IN_PROJECT」を作り、値を「true」にする

「システム環境変数」の「新規」で追加しましょう。

変数:PIPENV_VENV_IN_PROJECT
値:true

これにより、各フォルダのルート直下に仮想環境が構築出来るようになります。

そうしたらパソコンを再起動しましょう。環境変数を反映させるためです。

・Pipenvの使い方

Pipenvの実際の使い方を説明します。
まず、仮想環境を作りたいフォルダ(プロジェクトフォルダ)を作ります。

そうしたらターミナルでその場所に移動し、そこで

pipenv --python 3.7

のように打ちます。(これは例なのでpython 3.8でも何でも良いです。)

こうするとその場所に仮想環境がPython3.7で構築されます。
(指定する「Python3.7」は手動であらかじめインストールされている必要があります。)

次に、

.venv/Scripts/activate

と打つと、アクティベートされます。

deactivate

で、ディアクティベートされます。

あとは自由に、djangoなどのライブラリを追加でインストールしていきましょう。
インストールする場合は必ず

pipenv install django==2.2

このように「pipenv install」とすることに気をつけましょう。
通常の「pip install」だと、おそらく仮想環境ではなくPythonの本体にインストールされてしまいます。

また、仮想環境を消したい場合は「pipenv install」で作成されたファイルとフォルダを削除するだけでOKです。

.venv
Pipfile
Pipfile.lock

この2つのファイル(Pipfile、Pipfile.lock)と1つのフォルダ(.venv)です。

以上でPipenvの簡単な説明でした。

仮想環境を、Pythonのバージョンを指定して作成出来て、
それぞれのフォルダで仮想環境を作成&立ち上げられることが便利ですね。

使うときにはアクティベートのコマンドを打つだけなので、どのPythonのバージョンで作ったかを覚えておく必要もありません。

ちなみに、djangoをインストールしたあとは
django-admin startproject プロジェクト名

のようにしてプロジェクトを作り
その中に入って
django-admin startapp アプリ名
でアプリを作り、
そのあとに
python manage.py runserver

としてから
http://localhost:8000/
(ローカルのサーバー。実行時に3000か8000か表示されるはず)
にアクセスしましょう。

参考:
「PipenvでDjango開発環境をつくる」
https://qiita.com/nochifuchi/items/4fe0164f0d8949cf11b7

・requirements.txtを作成する

requirements.txtを作成するには、
コマンドライン(ターミナル)で、

pipenv lock -r > requirements.txt

を実行します。

参考:「Pipenvことはじめ」
https://qiita.com/shinshin86/items/e11c1124e3e2e74556b8#requirementstxt%E3%81%AB%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%99


Pipenvについて、より詳しくは、

「Windows + Python + pipenv でらくらく開発環境構築」
https://qrunch.net/@toyocy/entries/Y2wBhjSWunnK0CPI

「Pipenvを使ったPython開発まとめ」
https://qiita.com/y-tsutsu/items/54c10e0b2c6b565c887a

これらの2つの記事が詳しいので参考にしてみて下さい。


おまけ

pipenvコマンドを使うと、

pipenv : Courtesy Notice: Pipenv found itself running within a virtual environment,
so it will automatically use that environment, instead of creating its own for any p
roject. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that envir
onment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this
warning.

という文が出ることがありました。そこで環境変数に
PIPENV_IGNORE_VIRTUALENVS=1
を追加すると
python manage.py runserver
コマンドでdjangoを動かしたときにサーバーが停止出来なくなる挙動が出ました。
なので、現在はこの環境変数は設定していません。

参考:「pipenv で任意の場所の仮想環境を使う」
https://qiita.com/tonluqclml/items/cd0d2a2cb0197cbaee42

BEYERDYNAMIC AMIRON WIRELESSのレビュー。音は高音に寄りがちだが、全体的にはクリアなリスニング用のヘッドホン

BEYERDYNAMIC AMIRON WIRELESSのレビューです。

一度書いたのですが、WordPressのミスで消えてしまったので同じ事を書きます;

今回、ONZOでレンタルしたもののレビューになります。

前提条件として、SONYのMDR-1Aを基準に考えているとご理解下さい。

BEYERDYNAMIC AMIRON WIRELESSは8万円。レンタルしたものの中では最高峰のお値段です。

このヘッドホンはワイヤレスと有線の2種類の使い方が出来ます。

音質ですが、結論から言うと
『高音に寄りがちだが、全体的にはクリアなリスニング用のヘッドホン』
という感じでした。

高音はやや強めで、楽曲によってはドンシャリのシャリ気味だと感じるかもしれません。
ただ、それと同じくらいに低音も出ます。低音は包み込んでくれるタイプの低音です。

ですので、全体のバランスとしてはまとまっているように感じます。
どちらかというと高音のほうが強いです。

中音域はそこそこ聴こえますが、リスニング用という感じで、強く主張することはありません。

低音の量ですが、あくまでも心地良い程度に出てくれるという感じで、
超低音がドンドンと出るイメージではありません。

例えば、

この「分かち合うより」の部分で鳴っている低音はMDR-1Aで聴くとベースがとても心地良く聴こえますが、BEYERDYNAMIC AMIRON WIRELESSで聴くと『ベースが大きめに鳴ってるな』くらいにしか聴こえません。

このように、低音を中心に楽しみたい場合はやや役不足でしょう。

重さはバッテリーもあるせいか、少し重いです。そこまで気にはなりません。
ヘッドホンの質感が高く、付け心地は良いです。耳ごとすっぽり覆ってくれます。

モニターヘッドホンのように耳の横で音が鳴るわけではなく、イヤーパッドによりやや距離があって鳴っていることもあり、少し俯瞰して音を聴くようなイメージです。
つまりモニターヘッドホンのように音が近くないという意味で、リスニング用ヘッドホンですね。

改めて聴いてみると、やや低音が出ないのと、高音が少し出すぎているような印象を受けました。

やはり音が軽めで高音に寄っているイメージです。

ちなみにワイヤレスヘッドホンは便利だと、今回初めて分かりました。

例えばYouTubeの動画などをBluetoothで繋げて試聴していれば、少し部屋の中を動いていても音声だけで楽しめるので、自由度が増します。

Bluetoothだともちろん音質は少し劣化します。
遅延は、MacBookProで使用した限りではほんの少し感じる程度で、そこまでの遅延は感じませんでした。
ただ、全く遅延が無いわけではなく「あぁBluetoothだな」と感じるくらいはあります。

以上がBEYERDYNAMIC AMIRON WIRELESSの簡単なレビューになります。


※一ヶ月も使っていませんので、あくまでその程度の期間のレビューだということで参考程度にしていただけると幸いです。

GRADO SR325eのレビュー。見かけによらず低音がめちゃめちゃ出るヘッドホン。全体のバランスも良い。隠れた名機。

GRADO SR325eのレビューです。

ONZOでレンタルしたものになります。

ざっくりメモ程度に書き残しておきます。

前提条件として、SONYのMDR-1Aを基準に考えているとご理解下さい。

ちなみにレビューした後に説明書を見て気づきましたが、これはオープンエアのヘッドホンです。


GRADO SR325e

GRADO SR325e

まずこのヘッドホンですが、形がとてもスリムです。
小型に見えますが、イヤーパッドの部分は金属の丸い部分があるので重量感があります。

イヤーパッドも小型なので「低音はそんなに出ないかな?」と思ったら、めちゃ出ます。

他のレビューでも言われていますが、ロックを聴くのに向いていますね。

エレキギターの金属感が心地よく出ます。
低音の迫力から高音までの尖り方が秀逸で、心地良く聴けます。
低音は濁りやボワつきの無い、割とタイトな低音です。

この小型からは想像もつかないような迫力とクリアな音が出ます。

中音域から高音までもしっかり見通せます。変な音の癖もありません。

モニターヘッドホンのように音が近すぎる、というような事もありません。
リファレンスヘッドホンのような、「全体を1つにまとめていて何となく良い感じに聴こえる」という聴かせ方でもありません。

高音も問題ないでしょう。よく出てくれますが、チューニングが最適です。
くもった感じもなく、突き刺さりすぎる感じでもありません。
どちらかというと高音はしっかり出るタイプです。

あえて粗を探そうとしたのですが、特にありませんでした。

あえて言うなら、ヘッドホンのケーブルを両耳の下から出すタイプで、その線がちょっと太いという事です。Y字になってジャックに差し込む本ケーブルの部分が一番太いです。
ケーブルは外せるタイプではなく組み込まれているので交換は出来なさそうです。

ただ、持ち運ぶ用途ではなく家で使う用途なら気にならないかな、というのが感想です。

耳のイヤーパッドの部分はスポンジのようになっています。耳たぶに押し付けるような感じになります。耳そのものをすっぽり覆うタイプではありません。
装着感は、スポンジが良い感じにハマってくれるので耳が痛くなることはありません。
側圧は丁度いいです。

ただ、低音は耳を包み込むような低音ではなく、割とタイトな低音になるので、R&Bやダンス・ミュージックなどで超低音を中心に聴きたい(包まれる感じを楽しみたい)場合は向いていないかもしれません。

これは超低音が聴こえないということではありません。しっかり聴かせる能力は持っていますが、質がややタイトになる傾向があるということです。

音が非常に素直なので、ミックスやマスタリングにも使えると思いました。
致命的な弱点が見つかりません。

あ、あえて言うと周波数特性が「18 – 24,000 hz」ということなので、96kHzなどには対応していないことくらいですかね。

サンプリング周波数が48kHzだと、出せる音は最高でもざっくりその半分の24kHzくらいのはずなので、48kHzで作業をする場合には問題ないでしょう。(合ってますよね?)

これは隠れた名機だと思います。

みなさんも興味があったらレンタルがオススメです。

これは普通に欲しいと思いました。
買うかもしれません、ということでメモしておきたいと思います。


※一ヶ月も使っていませんので、一応その程度の期間のレビューだということで参考程度にしていただけると幸いです。

SHURE SRH940のレビュー。低音域~中音域がしっかり出るクリアなモニターヘッドホン。超高音がやや弱め、ちょっと重い。

SHURE SRH940のレビューです。

前提条件として、SONYのMDR-1Aを基準に考えているとご理解下さい。

SHUREのヘッドホンで、SRH940の噂は聞いていました。

SHURE SRH940

SHURE SRH940

今回、ONZOで借りることが出来たので、本当に簡単ですがレビューです。

まず、とても音がクリアです。
低音から中音域までの解像度が高いです。高音も出ていますが、超高音は少し弱めです。

低音はかなりしっかり出ています。

モニターヘッドホンとして完成度が高いです。個人的には高音が惜しい。
思ったのは下手に高価なモニタースピーカーを買うよりも、SHURE SRH940を買っておけば低音から中音域まではカバーできそうです。そのくらいのクオリティがあります。

あえて言うなら、高音の上のほうが少し弱い気がします。少しだけ暗めの高音。以下で説明。

こういうストリングスの艶っぽさを確認するのが少し苦手です。キンキンした音が鳴らないんです。
とりあえず高音が鳴っているのは分かるのですが、さらにその上の倍音がどのようなニュアンスで鳴っているかがあまり見えてこない感じです。
良く言えば、ドンシャリではないです。高音がシャリシャリしていません。
シャリシャリしていなくていいので、もう少しだけ出てほしかったです。

MDR-1Aのほうが高音の抜けは良いので、その点では僕はMDR-1Aのほうが好みです。

しかし、低音域~中音域のクリアさはSHURE SRH940は非常に優れています。

低音の存在感・表現力がSHURE SRH940にはあります。
中音域もモニターヘッドホンらしくパキっと鳴り、何が鳴っているか見やすいです。

イヤーパッドの側圧はかなり強めです。
重量もそれなりにあるので、付け心地の点ではMDR-1Aの方が良いです。

耐久性については分かりませんが、ヘッドバンドが割れやすいという声をよく聞くので見てみたところ、たしかにプラスチックで壊れやすそうではあります。

正直、もう少し長く使い込んでみたいと思いました。とりあえずこれは本当にメモ用です。

みなさんも興味があればレンタルがオススメです。

SHURE SRH940 – ONZO ヘッドホンのサブスクリプションサービス

そのような感じで、簡易的なレビューでした。何かの参考になれば幸いです。


※一ヶ月も使っていませんので、あくまでその程度の期間のレビューだということで参考程度にしていただけると幸いです。

Mac mini 2020/2019のメモリを増設する方法

Mac mini 2020/2019のメモリを増設する方法のYouTubeビデオを発見したので、自分用メモとして残しておきます。

Mac miniはDTM用のMacとしても、プログラミング用のMacとしてもとてもコストパフォーマンスが高いです。

DTMではメモリの増設が必須。8GBだと厳しいので、16GB、32GB、メモリは多ければ多いほど快適に動きます。

しかし、メモリの増設オプションはお金がかかります。
購入時に設定したMac miniのメモリを基本的にはそのまま使うことになります。

このように、Mac miniは通常はメモリ増設が出来ない事にはなっているのですが、今回見つけたのはそのMac miniのメモリを増設する方法です。 続きを読む

Windows10でコマンドプロンプトのPythonコマンドのバージョンを切り変える方法(3.6と3.8を切り替え等)。環境変数の2つの値を上に持っていこう。上にある環境変数のバージョンが優先されます。

どうも、りーずです。

・Python3.6を機械学習用に、
・Python3.8はDjango用に、

など、複数のPythonのバージョンを切り替えたいときがありました。

しかし、コマンドプロンプトにおけるPythonコマンドの複数バージョンの切り替え方法の良い情報がなかなか検索で出てこない。

ということで色々自分で試した結果、切り替える方法を見つけたのでシェアします。

結論から言うと、
環境変数の設定で

C:¥Python¥Python385¥Scripts¥
C:¥Python¥Python385¥

というように、設定したいPythonのバージョン(この場合はPython3.85)の環境変数を一番上に持っていくと、
コマンドプロンプトでPythonコマンドを発動するときに、そのPythonのバージョンが優先されます。

Pythonの環境変数は下記のように2つ必要です。
[インストール場所]¥Scripts¥
[インストール場所]¥

環境変数の設定には「上へ」「下へ」などのボタンがあるので、意外と簡単に切り替えが可能です。

使わないPythonのバージョンは下にあれば読み込まれないので大丈夫です。

以下で詳細に解説。


Pythonはインストーラーでインストールします。
パスはどれも通す設定にします。

ちなみにPythonのダウンロード先は

この動画を参考に、
Python3.67の場合は
C:¥Python¥Python367

Python3.85の場合は
C:¥Python¥Python385

のようにして場所を指定しました。
32bit版の場合はうしろに -32 と付けると分かりやすいと思います。

例:
C:¥Python¥Python385-32

なぜこれが良いかというと、virtualenvを使うときに、

この動画のように、たとえば
C:¥Program Files¥Python367
にPythonをインストールしていたとして、仮想環境を作ろうと

virtualenv -p C:\Program Files\Python367\python.exe py36_env

のようにすると、「C:\Program Filesの場所が読み込めない」というようなエラーが出たからです。
(この場合はPython3.67をインストールした場所を参照して、
仮想環境を「py36_env」という名前で作るコマンドです)

このとき僕は、『C:\Program Files』にPythonをインストールしていました。

「Program FilesのmとFの間にスペースがあったからエラーが出たのかな?」と思いました。
いずれにせよ、パスにスペースが含まれているのは好ましくないです。

(通常のインストールなら C:¥Program Files はデフォルトの場所ではないので大丈夫だと思います。この C:¥Program Files は過去に僕が設定した場所です。)

なので、
C:¥Python

というふうに、文字が少なく済み、エラーが出なさそうな場所にPythonのバージョン番号を割り当てて、それぞれのPythonをインストールすることにしました。

例えばPython3.67なら

C:¥Python¥Python367

のような具合です。

本題:環境設定の設定をする

さて、肝心の環境変数の話ですが、
Windows10のタスクバー右下にある >> という小さいマークをクリックし、
「コントロールパネル」から「システム」
システムの左上あたりにある「システムの詳細設定」をクリックし、

この画面を出します。

この画面の「環境変数」をクリックして、編集することが可能です。

「すべてのユーザーにPythonをインストール」設定にしている場合は
システム環境変数の「Path」を変更します。

以下のような画面になります。

ここでは上の画面で
Python3.85の環境変数が2つ、
Python3.67の環境変数が2つあるのが分かるかと思います。

コマンドプロンプトで使いたいPythonのバージョンを3.85にしたい場合は、
上の画面のように、Python3.85の環境設定2つ

[インストール場所]¥Scripts¥
[インストール場所]¥

の2つの環境変数を一番上(他のPythonの環境変数より上)に持って行きましょう。

そうしたら「OK」を押して、システムのプロパティも「OK」を押して、一度すべてのウィンドウを閉じましょう。

さらに、コマンドプロンプトを立ち上げているときは一度閉じて、また立ち上げます。

そうして、

python --version
と打つと、先程設定したPythonのバージョンになっていると思いますのでお試し下さい。

ちなみに

py -3.6
などpyコマンドによってPythonのバージョンを切り替えることは可能ですが、
今回はpythonコマンドに割り振られるPythonのバージョンの切り替えを説明したものになります。

以上、何かの参考になれば幸いです。


※何か間違っている事などございましたら
Twitter @so_meru までご教示いただけると大変助かります。