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は良いよ!というメモです。


・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 install --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


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

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

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

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

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 までご教示いただけると大変助かります。

DjangoでオープンソースのECサイトを作る方法。Saleor(https://saleor.io)やOscar(django-oscar)を使ってみよう。

DjangoでECサイト作りをしたいと考えていたところに、YouTubeで良さげな動画を見つけました。

「Python Django e-Commerce Tutorial 2020 – for Beginners」

とても簡潔に説明がされています。
ローカル環境で動くところまで。

上の動画のECサイトの実装ではSaleorhttps://saleor.io/)というDjangoのライブラリを使っています。

デモサイト:
https://demo.saleor.io/

デモサイト管理画面
https://pwa.saleor.io/dashboard/

このライブラリはオープンソースですが、サポートを受けたい場合は別途月々の料金が必要なようです。スタンダードプランで月に約10万(950ドル/月)。ちょっと高すぎる。
ただ、個人で普通に使いたいだけならフリープランでいけそうです。
フリープランでもカスタマイズや商用利用が可能です。

Djangoは最初からログイン/ログアウト(認証)やアクセス制限などの
「管理権限系の処理」と、その管理画面が実装されているので、
Djangoを入れるだけでユーザーとスーパーユーザー(管理人)を分けて処理を行うことなどが出来ます。

(ちなみに上記デモサイトでも分かるようにSaleorでは管理画面はDjangoの管理画面ではなくSaleorの管理画面が用意されています。)

また、ちょっと調べてみたところ、Saleorとは別に、Oscar(https://github.com/django-oscar/django-oscar)というEコマースのライブラリもあるようです。

『コピペで始めるDjango Oscor – Qiita』
https://qiita.com/shinriyo/items/a59412f4569171e41606

『django oscar 簡易チュートリアル – Qiita』
https://qiita.com/d0d0npa/items/4a4cc9914feebf60bbc0

Cartridgeというライブラリも発見。
https://github.com/stephenmcd/cartridge

このようなストア系のライブラリがあれば、車輪の再発明のような事をしなくても良いのですね。
選択肢が広がります。


話は別ですが、個人的には2020年5月現在でオリジナルのECサイトを作る一番簡単な方法は、WordPressにWooCommerceのプラグインを入れてStripe決済にすることだと思います。
Stripeは維持費なし、手数料が販売金額の3.6%のみ。凄いのは振込手数料も0円です。

限定公開URLやパスワードをつけることが出来るのでかなり良いです。
海外から作曲の依頼があったときにデータの受け渡しやライセンスの販売に使えます。
購入後のダウンロード期限(日数)の設定まで出来ます。
ゲスト購入(アカウントを作らずにE-Mailのみでの購入)も可能。

ただ、これだと商品表示の方法や音楽プレイヤーの表示・仕様の自由なカスタマイズなど、自分の思っているような事が微妙に出来ないんですよね。

ということで色々調べています。


メモ用に書き残しておきます。

英語のニュースで出てくるちょっと難しい単語・語句一覧(個人学習用)

どうも、りーずです。

英語学習のために、英語のニュースをラジオで聞けるようなサイトを探していました。
そこで見かけたツイートがこちら。

NPR National Public Radio
https://www.npr.org/

主に募金や寄付金で成り立っているニュースメディアです。
米国の非営利・公共のラジオネットワーク。

音声コンテンツが驚くほど充実しています。
毎時のニュースやモーニングエディションという朝のニュースのまとめ等があります。

スマホのアプリで使ったほうがラジオが聞きやすいです。
こちらはiOS用アプリ。
https://apps.apple.com/jp/app/npr/id324906251

アプリでニュースを聞きながら、分からない単語をスマホのブラウザ検索でどんどん調べていくと語彙が増えていきます。

 

ということで、このようなニュースサイトで学習した単語を羅列していきます。
多分逐次更新。


英語のニュースで出てくるちょっと難しい単語・語句一覧

・never beforeバー ビォー)
成句:今までになかった

・Recessions
(リッションズ)
名詞:不況、不景気、景気後退

・senate
ネット)
名詞:上院
ちなみに下院は「the Lower House」「the House of Representatives(アメリカの場合)」
などと言うらしい。

・exacerbate(イグーサベイト)
動詞:(状況を)悪化させる

・mereーァ)
形容詞:たったの、単なる、ほんの

・fabulousファビュラス)
形容詞:素晴らしい

・signatureィグニチュアー)
名詞:署名、サイン

・figure out
成句:考えて理解する、考えて答えを見つける

・so to speak
成句:いわば、言ってみれば

・deficitフィスィット)
名詞:赤字額、不足額、損失

・reiterate(リーダレイト)
動詞:繰り返し言う

・conservation(コンサィション)
名詞:保存、保護

・convention(コンンション)
名詞:会議、(政治)党大会、集会、
慣習、約束事

・come under
複合動詞:(管理・支配などの)下に入る、~の部類に入る、

・come under criticism
成句:批判される

・in need
成句:必要としている、不足している

・kludgy(クルージー、クラジィ)
形容詞:ずさんな

・in person
成句:直接、自分自身で

・contractントラクト)
名詞:契約
動詞:契約を結ぶ

・conducting(カンクティング)
名詞:実施、行為、(音楽の)指揮

・urgencyアージャンスィー)
名詞:緊急

・lingerンガー)
動詞:残る、とどまる


・counsel
ウンセル)
名詞:顧問、弁護士、
例:national security counsel → 国家安全保障顧問

counselは「~顧問」という意味で出てくる場合が多いと思います。

・boonーン)
名詞:たまもの、恩恵
形容詞:愉快な

・to this end
成句:この目標を達成するために

・get through
成句:(困難を)切り抜ける、通り抜ける

・quarantine(クォーランティーン)
名詞:隔離、検疫

・roundupウンドアップ)
名詞:概要、まとめ、総括

・investigate(インスティゲイト)
動詞:調査する、取り調べる

・investigation(インベスティイション)
名詞:取り調べ、調査、捜査

・testifyスティファイ)
動詞:証言する、証明する

・testimonyスティモニー)
名詞:(法廷での)証言、証明

・commence(コンス)
動詞:(~を)開始する、し始める、
(自動詞)始まる

・overwhelmingly(オーバーウェルミングリー)
副詞:圧倒的に

・overwhelming(オーバーウェルミング)
形容詞:圧倒的な

・prosecutor(プセキューター)
名詞:検察官、検事

・dictatorディクテイター) 続きを読む

【メモ】database.ymlをgitの管理から外してデプロイしたかった【Rails、Heroku】

HerokuにRailsをデプロイする際に、database.ymlをgitの管理から外してデプロイしたやり方をメモ。何をどうしたかだけメモっておきます。
(合ってるか分かりません。)

まず、
.gitignoreファイルの
/config/database.yml

となっている行をコメントアウトします。 続きを読む

Herokuでデータベースに接続する方法と、PostgreSQLでよく使いそうなコマンド(自分用)

Herokuでデータベースを使う方法と、PostgreSQLで使いそうなコマンド(自分用)です。

・ログイン
psql -U postgres -d postgres

ローカル環境にはこれでログインします。
postgresというユーザー名でログインしています。

パスワードを求められるので、入力してログイン。
パスワードを設定していない場合で、例えば「rails_app_development」というデータベースにログインする場合は

psql -d rails_app_development

でログインできます。

HerokuのPostgreSQLにログインする場合
ターミナルでアプリの場所に行き
heroku psql

でログインできます。(設定の詳細はこの記事の最後で説明します)
パスワードは必要ありません。

・データベースの一覧を出す
\l

これでデータベースの一覧が出ます。

ポート名、ホスト名が必要な場合は
psql -l -p ポート番号 -h ホスト名
このようなオプションになります。

・各データベースに接続
\c データベース名;
データベース一覧から選びます。 続きを読む