Herokuのアプリ名とGitリモートをコマンドラインから変更する

herokuのアプリ名を変更する際に、上の画像のように、herokuのダッシュボードから変更しようとすると、Warningが出て、「変更後はremotesも変更が必要」と言われるので、手動で変更してやらないといけません。その方法でも可能ではありますが、herokuのコマンドで $ heroku apps:rename ~ を使えば、アプリ名とGitリモートurlも一発で変更してくれます。

まずはpush先となるリモートのurlの確認です。ここのリモートurlが通っていなければ、 $ git push heroku master のコマンドが通らないことになります。

そして、変更したい新しいアプリ名をつけて $ heroku apps:rename ~ のコマンドを打つとこのようなメッセージが出て、gitリモートも変更されます。

変更されているのが確認できます。

herokuのダッシュボードからも変更されているのが確認でき、https://new-name.herokuapp.comでアクセスできるようになります。

簡単ですが以上です!ご覧いただき、ありがとうございました!!😌

【Rails】time_ago_in_words メソッドで created_atを「〜前」と表示する

Ruby on Rails で created_atで作成日時を表示する際に、Twitterのように「〜前」という表示をする方法です。

rails time_ago_in_words

Views

ビューはこんな感じです。

Locales

configでdefault_localeを日本語に設定します。

config/application.rb

こちらを参考に、ja.ymlに datetime、distance_in_words を設定します。

config/locales/ja.yml

次のようなエラーメッセージが出ている場合は、記述ミスがあるか、インデントが合っていないかもしれません。

rails_i18nで日本語と英語をパラメータで切り替える方法はこちらの記事をご覧ください。
https://remonote.jp/rails_i18n_locale_ja_en

以上です!ご覧いただき、ありがとうございました!!😊

【Django】Bootstrap4を使って リダイレクト先でメッセージを表示する

Djangoでデフォルトで用意されているmessages framework + Bootstrap4を使って、CRUD操作の際のリダイレクト先でメッセージを表示させる手順のメモです。

実行環境

環境はこちらです。

構成はこのようになります。今回、編集/追加するファイルのみ記載しています。

上記のディレクトリにダウンロードした、bootstrap.min.css と jquery-3.3.1.min.js を配置します。
https://getbootstrap.com/docs/4.1/getting-started/download/
https://jquery.com/download/

実装

次のコマンドでbootstrap4をインストールします。

Settings

settings.pyに’bootstrap4′, を追記します。’django.contrib.messages’はデフォルトで入っています。

mydir/myproject/settings.py

一時的なメッセージを保存するための、ストレージはデフォルトで’FallbackStorage’になっています。変更する場合は、以下のように、指定します。
本家ドキュメント参照

mydir/myproject/settings.py

Views

ビューにメソッド・メッセージを記述していきます。メッセージタグは’debug’, ‘info’, ‘success’, ‘warning’, ‘error’を指定できます。

mydir/blog/views.py

Templates

共通テンプレートで bootstrap4, css , js を読み込み、メッセージを表示する記述を加えます。

mydir/templates/base.html

jQueryで自動的に非表示にする

アラート・メッセージは表示し続けるより、さりげなく、フェードアウトさせる方がいい!という方は、jQueryのsetTimeout関数を使うと実現できます。今回はオプションをfadeOut(‘slow’)、タイミングは「3000」で3秒後としてみました。

CSSでスタイル調整

ブートストラップ感に飽きてきたら、CSSで上書きしましょう!大雑把ですが(汗)。

mydir/static/css/style.css

以上です!ご覧いただき、ありがとうございました!!😌

【Django】「No URL to redirect to. Either provide a url or define a get_absolute_url method on the Model.」の対処

エラー内容

Djangoの CRUD ジェネリックビュー を使っていて、Createをした時に、次のようなエラーがでました!

対処法

リダイレクト先のURLがないとのこと。。。エラーメッセージそのままですが、 get_absolute_url メソッドをモデルに設定するのを忘れていました!
本家ドキュメント参照

myapp/models.py

これで、Createアクション後にdetailパスにリダイレクトするようになりました!
idのないindexなどに飛ばす場合は return reverse(‘blog:index’) でOKです。

その他関連ファイルです。

myapp/urls.py

myapp/views.py

以上です!どなたかの参考になれば、幸いです!😊

Docker for Macで Rails + PostgreSQLの開発環境を構築する

Mac + Rails + PostgreSQL の開発環境をDockerを使って、素早く構築するための手順です。

Docker for Macのインストール

こちらからDocker for Macをインストール ~ ダウンロード ~ Dockerアプリを起動します。

必要なファイルを作成

Railsアプリ用のディレクトリを作って、そこに移動します。今回はmyappとしました。

そして、作成したディレクトリに次の4つのファイルを以下の内容で作成します。
・ dockerfile
・ Gemfile
・ Gemfile.lock
・ docker-compose.yml

dockerfile

Gemfileは現時点では、これだけです。railsはバージョン指定なしで、最新版がインストールされます。

Gemfile

空のGemfile.lockを用意します。

Gemfile.lock(空のファイル)

docker-compose.yml

プロジェクトの構築

次のコマンドで上記ファイルを読み込み、Dockerコンテナ上に、Railsアプリケーションが作成されます。

Docker imageの作成

次のコマンドでdocker iamgeを作成します。

データベースの設定と作成

DBの設定を以下のように、追加します。

config/database.yml

そして、DBを作成するコマンドを実行します。

Dockerの起動

次のコマンドで、Dockerコンテナが立ち上がり、Rails Serverも起動します。

そして、http://localhost:3000にアクセスして、こちらのページが表示されたら、成功です。

コンテナの停止と起動

ショートカットの「Control + C」でコンテナが停止し、$ docker-compose up で起動します。
webサーバが正常に終了していない時に、次のようなログが出て、コンテナの起動に失敗することがあります。

そのような時はpid情報を削除するために、次のコマンドを実行すると解決します。

その他

開発中にrailsコマンドを実行する場合は 次のように、$ docker-compose run webをつけます。

また、Gemfileを更新したときは、$ docker-compose build をしなければいけません。なので、Gemfileを更新したときは、次の2つのコマンドを実行する必要があります。

この手間をなんとかしたいのですが、現状できていません。(泣)

以上です!ご覧いただき、ありがとうございました!!

【Django入門】Hello Worldの表示と、Templateでhtmlページの表示

前回の 【 Django入門】venv(仮想環境)でプロジェクトを立ち上げて GitHubにpushするまでの続きとして、ビューでHello Worldの表示と、Templateを使って、htmlページを表示するまでのメモです。

バージョンはこちらです

前回まででは次のような構成になっています。

Hellow, World!するまで

d-projectに移動して、仮想環境をアクティブにします。 (ここではmyvenv)

d-project/配下に、myappという名前でアプリを作成します。

myapp/views.pyにHTTPレスポンスで”Hello, World!”を返すように記述します。

myapp/views.py

myapp/配下にurls.py を作成して、views.indexと紐づかせて、ルートurlで表示させます。

myapp/urls.py

mysite/urls.pyも以下のように、編集します。

mysite/urls.py

INSTALLED_APPSに’myapp’を追加します。

mysite/settings.py

これで http://127.0.0.1:8000 にアクセスして、”Hello, World!”が表示されたら成功です!

テンプレートでhtmlページの表示

これまでのファイルにいくつかの記述を追加していきます。myapp/urls.pyにはviews.indexでtemplateを呼ぶようにurlに記述します。

myapp/urls.py

mySite/settings.pyに以下の1行を追加して、templatesのpathを指定します。

mysite/settings.py

d-project/配下に、templatesディレクトリを作成して、その中に共通して使用する親テンプレートとなるmain.htmlを作成して、以下のように記述します。
「{% block ブロック名 %}」と「{% endblock %}」で囲まれた部分は子テンプレートを継承します。

templates/main.html

templates/index.htmlを以下のように作成します。「{% extends “親テンプレート名” %}」で継承します。

templates/index.html

myapp/views.pyの以下の箇所を追記します。

myapp/views.py

これで http://127.0.0.1:8000 にアクセスして、”welcome template!”が表示されたら成功です!

以上です!ご覧いただき、ありがとうございました!!☺️

【 Django入門】venv(仮想環境)でプロジェクトを立ち上げて GitHubにpushするまで

Pythonのwebフレームワークである、Djangoを Mac + venv(仮想環境) で、ローカル環境に立ち上げて、GitHubにpushするまでをメモしました。

Pythonのバージョン

MacOSの場合、デフォルトでPython2系がインストールされているかと思います。バージョンを確認する場合、ターミナルで以下のコマンドを実行します。

最新のバージョンをインストールする場合は、Python公式サイトよりダウンロードして、インストールしてください。(2018.10.24現在はPython 3.7.1)

venv(仮想環境)の作成

適当なディレクトリ(ここではd-project)を作って、そこに移動します。

python3のバージョンを指定して、次のコマンドで、venv(仮想環境)を作成します。(ここではmyvenv)venvはPython3.3 から標準で取り込まれています。

仮想環境をアクティブにします。

アクティブモードから抜けるときは $ deactivate です。

Djangoのインストール

Djangoのインストールには、pip(ピップ)というPythonのパッケージを管理するツールを使用します。Macはデフォルトでpipが導入されていて、 $ pip -V コマンドで確認ができます。まずはpipを最新バージョンにします。venv内ではpythonのバージョン指定は不要です。

次のコマンドを実行すると、最新のバージョンのDjangoがインストールされます。Django公式サイトにてlatest official versionが確認できます。

次のコマンドはpipで管理しているパッケージの確認ができます。

Djangoプロジェクトを作成

それでは次のコマンドでプロジェクト(ここではmysite)を作成します。コマンドの最後にピリオド . を忘れないように。これは、現在の作業ディレクトリにDjangoをインストールするということを示しています。

プロジェクトを起動する前に、myite/settings.pyに言語とタイムゾーンを日本に設定しておきます。

mysite/settings.py

次のコマンドを実行して、データベースを作成します。

サーバーの起動

次のコマンドでローカルサーバーの起動をします。

http://127.0.0.1:8000/ にアクセスして、次のような画面が表示されたら、成功です!ちなみに、サーバーの停止はショートカットで Control + C です。

GitHubへpush

GitHubのアカウントを取得していない場合はGitHubページから、アカウント登録をします。

ルート・ディレクトリで次のコマンドを打ち、Gitリポジトリの新規作成、または既存のGitリポジトリの再初期化を行います。

Gitはすべてのファイルの変更履歴を管理しますが、管理対象に含めたくないファイルは .gitignore をルート・ディレクトリに作成して管理します。内容は以下の通りとしました。

.gitignore

次のコマンドで、カレントディレクトリ(自分の今いるディレクトリ)以下の全てのファイルをステージングエリアに追加します。「.」がカレントディレクトリを示します。

「-m」フラグで、コミットメッセージをつけて変更をコミット(保存)します。

※「git add .」 と 「git commit -m」 を 一度に行う場合は「git commit -a -m “コミットメッセージ”」です。

GitHubページで New repository を作成しておき、次のコマンドでリモートリポジトリを追加します。

そして、次のコマンドで、ローカルリポジトリを、リモートリポジトリにプッシュ(同期)します。

Username と Password を聞かれるのでGitHubのアカウント設定のものを入力します。

以上です!ご覧いただき、ありがとうございました!😀

続編として、【Django入門】Hello Worldの表示と、Templateでhtmlページの表示も合わせて、ご覧ください!

【Rails】PG::DuplicateTable: ERROR: relation “table_name” already exists の対処

rails開発中に PG::DuplicateTable: ERROR: relation “messages” already exists とエラーが出た時の対処です。私の場合は、試行錯誤していて、migrateを実行していたけれど、安易に $ git checkout -f をしたことで、次回のmigrateができなくなりました。

エラー内容

schema.rbを見るとmessagesテーブルが残っています。

対処法

messageテーブルを削除するためのマイグレーションファイルを作成します。

内容は以下のように、drop_table :messagesとします。

db/migrate/20181022050439_delete_messages.rb

これで $ rails db:migrate すると無事、解決しました!

以上です!! ご覧いただき、ありがとうございました!!

【Rails】db:migrate:statusで*** NO FILE ***と出た時の対処

マイグレーションファイルをrollbackせずに、削除してしまった時など、 マイグレーションのステータスに********** NO FILE **********と出てしまった時の対処です。

問題の箇所

Statusがupの状態で、ファイルが削除されて、NO FILEとなっています。

対処法

ステータスがupとなっているところをdownにしなければいけないので、そのためのマイグレーションファイルをdb/migrate配下に作成します。NO FILEとなっているマイグレーションIDのファイルが必要なので、20181021135030_dummy.rbとします。
内容は以下のような内容でOKです。Rails5からはmigration versioingが導入されていますので、それぞれのRailsのバージョンを指定します。

db/migrate/20181021135030_dummy.rb

この状態でもう一度、ステータスを見ると、作成したマイグレーションファイルが確認できます。

そして、次のコマンドでdownにします。(マイグレーションIDはご自身のものを指定)

ステータスを確認するとdownになっていますね。

あとは20181021135030_dummy.rbを削除すれば、OKです。

以上です!!
ご覧いただき、ありがとうございました!!

【WordPress】サイトのロゴをSVG画像にする

SVGとは

SVG(Scalable Vector Graphics)は、ベクター画像のため、JPEGやPNGなどと比べ、高画像で軽量、またCSSでsizeやcolorの変更などができます。進化し続ける高解像度なスマートフォンや、Retinaディスプレイなどへの対応には、SVGが必須と言えます。

WordPressでSVGのアップロード

WordPressはデフォルトでSVGファイルのサポートを行なっておりませんので、SVG画像のアップロードができません。それを許可するためには、子テーマ内のfunctions.phpへ、以下の記述を追加します。

functions.php

これでSVGファイルが許可されたファイル形式となり、アップロードが可能になります。

SVG画像の設置

通常、WordPressのサイトタイトルはheader.php内にあり、以下の部分が該当するかと思います。aタグの間にある< ?php bloginfo( 'name' ); ? >でサイト名が表示されます。

header.php

SVG画像をimgタグで表示する場合は、アップロードした画像のパスを以下のように記述します。

header.php

あとはcssでwidthなどを指定します。

css

これでも十分ロゴとして使えますが、色や、線幅を変えたくなったら、その度に画像を差し替えなければいけません。そういったことをcssでできるようにするには、SVGコードで表示させます。

SVGコードの取得

Illustratorで作成した時の場合ですが、 メニューの【ファイル > 書き出し > 書き出し形式… > 「ファイル形式: SVG(svg)」を選択 > 書き出し > コードを表示 】 で、txtファイルなどで表示されたSVGコードをコピーします。

illustrator svg txt

コピーしたSVGコードを、aタグの間に設置します。そのまま貼り付けても、問題ありませんが、コード量が多くなりますので、不要な記述は削除してもかまいません。

header.php

これでSVG画像が表示されたかと思います。

CSSの指定

色やサイズはCSSで指定します。SVGに使えるCSSのプロパティです。なお、fillやstrokeなどSVG独自のプロバティがあります。

ロゴをhoverさせる場合は、以下のように、指定すればOKです。

css

以上です!ご覧いただき、ありがとうございました!😌

【Rails】has_many – belongs_toで都道府県データを持てるようにする

都道府県データを扱う方法は色々あるかと思いますが、本記事ではhas_many – belongs_toのリレーションで、Userが都道府県データを持てるように実装したいと思います。ちなみにgemライブラリで実装する場合はgem ‘jp_prefecture’があります。

マイグレーション

まずは、都道府県名を入れる、Prefectureモデルを作ります。

db/migrate/20xxxxx_create_prefectures.rb

Userがprefecture_idを持てるようにreferencesを追加します。

db/migrate/20xxxxxx_add_prefecture_ref_to_users.rb

$ rails db:migrateします。

リレーション

app/models/prefecture.rb

app/models/user.rb

seedデータ

seedデータの編集が簡単なseed-fuを使ってseedデータをいれていきます。

db/fixtures/prefecture.rb

$ rails db:seed_fuを実行します。

コントローラー

create/updateできるように、ユーザーのストロングパラメータに:prefecture_idを追加します。

app/controllers/users_controller.rb

ビュー

form内はcollection_selectでプルダウンメニューにします。

app/views/users/_form.html.erb

app/views/users/show.html.erb

カウント数を取得

一つのPrefectureが持っているUser数を取得するには、countメソッドを使います。

以上です!ご覧いただき、ありがとうございました!!😄

Railsアプリへ Google Analytics を導入する

今回は、Ruby on Railsで構築したWEBサイトをアクセス解析するために、Googleアナリティクスを導入する手順をノートに記しておきたいと思います。
Railsの場合はgoogle-analytics-railsというgemライブラリがあり、簡単に導入できます。

GitHub
https://github.com/bgarret/google-analytics-rails

Gemのインストール

Gemfileに以下を追加します。

Gemfile

$ bundle installでインストールします。

トラッキングIDの取得

Googleアカウントでログインして、https://marketingplatform.google.com/about/analytics/より、手順にしたがって、申し込みをすると、トラッキングIDが発行されます。

Railsの設定

production.rbに取得したトラッキングIDを追加します。

config/environments/production.rb

application.html.erbの、< head >タグ内に、<%= analytics_init if Rails.env.production? %>
を追加します。

app/views/layouts/application.html.erb

これでデプロイしたら完了です!

動作確認

あとは、自身でアクセスしてみて、「Google アナリティクス ホーム」ページや「リアルタイム」のレポートページなどで、リアルタイムのアクセス状況が反映されていればオッケーですね!
google analytics rails

以上となります!ご覧いただき、ありがとうございました!!😃

【Bootstrap】Jambotron(ジャンボトロン)の画像がRails本番環境で表示されない問題の対処

Rails開発でBootstrapのJambotronを使って、画像を配置したとき、開発環境では問題なく表示されましたが、Herokuで本番環境にpushして、確認をしてみると、うまく表示されていなかったので、そんな時の対処方法をメモいたします。

対処前の状態

views

画像はapp/assets/images/配下に置いています。

css

これで、開発環境では画像が表示されていました。

本番ではエラー

しかし、本番でも確認しようとHerokuにpushして、ブラウザを見てみると、画像が表示されていなかったので、$ heroku logs -tコマンドでログを確認してみると、、、

RoutingErrorが出ていました!

対処方法

image_urlというRailsメソッドで呼び出してやることで、本番環境でも、問題なく表示されるようになりました!

css

ログにもエラーは出なくなりました。

その他の解決方法としては、app/assetsではなくて、public/assetsに画像を配置するという方法があります。ですが、これではRailsの推進するAssetPipelineが適用されません。よって、AssetPipelineの仕組みを使って、よりブラウザからの読み込み速度を上げるためにはapp/assets/images ディレクトリに画像を置くことが良いと言えます。

以上です!
どなたかのお役に立てば幸いです!!

複数行対応のjQuery三点リーダ 「trunk8」をRailsアプリに組み込む

長いテキストやはみ出したテキストを「・・・」といった3点リーダに置き換える場合、1行であれば、CSSで事足りるのですが、複数行になると webkit-line-clamp で、できますが、IE(Internet Explorer)に対応してないので、jQueryのtrunk8というプラグインで対応しました。その他にも同様のプラグインがありましたが、ブラウザ幅の可変への対応など、個人的にはこちらが一番しっくりきましたので、Railsサイトにも導入してみました。

本家デモサイトはこちらです。
http://jrvis.com/trunk8/

Scaffoldでデモアプリを作ってみる

jQueryを使うためにこれらを読み込みます。

Gemfile

assets/javascripts/application.js

$ bundle install を実行します

サンプルデータを入れる

seed.rbに適当なデータを投入してみます。

db/seed.rb

$ rails db:seedを実行します

trunk8の導入

こちらのページからダウンロードしてtrunk8.jsというファイルをapp/assets/javascripts配下に配置します。

1箇所ならid指定でいいですが 動的に複数となるのでclassセレクタにして、該当箇所にあてます。

app/views/users/index.html.erb

オプションはlinesで行数を指定、tooltipは全文が隠れていてもツールチップで全文を表示してくれます。デフォルトでは true 担っています。「…」以外をあてたい場合は、fill: ”で指定します。デフォルトは’&hellip’です。
ブラウザ幅の可変対応には、window.onresizeイベントです。

jQuery

IE ではインライン要素に使った場合に、正常に動作しませんので、CSSなどでブロック要素にしておきましょう。

以上となります!!ご覧いただき、ありがとうございました!!😁

「本番環境でCarrierWaveでS3にアップロードした画像が表示されない問題」の対処

Rails + Heroku + CarrierWave + S3 で、画像をアップロードしても、本番環境では画像が正しく表示されなかったので、その対処した時のメモを残したいと思います。

アップロード自体の方法はこちらの記事をご覧ください。

エラー内容

ブラウザで見るとこのようになって、正常に表示されません。

Amazon S3の管理画面で確認すると、問題なくアップロードはされていました。

対処内容

原因はconfig/initializers/carrierwave.rb内の、urlの指定が間違っていたからでした。以下のように asset_hostのurlの指定を修正すると、無事にストレージから画像を取得できました。そもそも、fog_directoryだけでも、画像の表示はできるようなので、asset_hostの1行を削除しても、問題ありませんでした。

config/initializers/carrierwave.rb

以上です!どなたかの参考になれば幸いです!
ありがとうございました!☺️

Herokuへデプロイ時に「assets precompile error」$ npm install yarn で対処

Rails + webpacker で heroku へ push した時に、「assets:precompile」に関するエラーで失敗した時の対処メモです。

バージョンはこちらです

エラー

対処

こちらの記事を参考にして、 $ mpm install yarn -gコマンドを実行。npm 経由で yarn をインストールし直しました。

そして再度、プッシュ。

デプロイ成功しました!
以上です!😀

docker-compose buildで「no Space Left on Device」のerrorが出た時の対処

Docker For Macで$ docker-compose build を実行した時に、以下のエラーが出たので対処した時のメモです。

エラー内容

no space left on deviceは「デバイスに空き領域がありません」というエラーです。

Dockerを使い続けていくと差分だけですが、 ディスクの消費が増えていきますので、不要なコンテナやイメージを削除する必要があります。

対処

次のように、コンテナもしくはイメージを確認をして、削除していきます。

不要なコンテナを削除すると、無事にbuildできるようになりました!
以上です!😊

PythonをAtomエディタのatom-runnerで実行する

本記事ではPythonの実行環境をAtomエディタとそのパッケージの「atom-runner」を使って簡単に構築する手順を載せております。

実行環境はこちらです。

MacOSの場合

MacOSの場合、デフォルトでPython2.7系がインストールされていて、直接実行することも可能です。実際にインストールされているかを確認するためには、「ターミナル」を使用すると簡単にできます。
ターミナルは、「アプリケーションフォルダ」内の「ユーティリティフォルダ」にインストールされています。
検索からターミナルを探す場合、ショートカットのCommand +スペースバーで、「Spotlight」を開いて、「terminal.app」と入力すると出てきますので、アプリを起動します。

ターミナルで以下のコマンドを実行すると、インストールされているバージョンが表示されます。

whichコマンドで、どこにインストールされているかパスがわかります。

最新版のPythonをインストール

デフォルトのバージョンではなく、最新版をインストールしたい場合の手順です。
※MacPortsやbrew等のパッケージ管理ソフトで、インストールしたい方は対象外です。

Python公式サイトより、Download Python 3.7.0(2018.10.5現在)をクリックして、インストーラーをダウンロードします。

インストーラーを開き、規約に同意してインストールします。

インストールを終えると、アプリケーションフォルダに「Python 3.7」が追加されます。フォルダ内の「Python Launcher」はPythonをファイルから実行するために必要なアプリで、「IDLE」はPythonの統合開発環境です。今回は使用しませんが、起動する場合、ターミナルから$ idle3コマンドでもIDLEが立ち上がります。

Atomのダウンロード

公式サイトからAtomをDownloadします。

atom-runnerのインストール

Welcome Guideの「Install a Package」をクリックしてから、「Open Installer」をクリックします。


出てきたSettingsの「Install Packages」のテキストボックスからatom-runnerを入力し、出てきた該当のパッケージを「Install」します。

また、Atomの言語を日本語に設定したい場合は、「japanese-menu」のパッケージをインストールしてください。

Pythonの実行

「untitle」のタブを選択し、Pythonでコードを記述し、拡張子が.pyのPythonファイルを作成します。atom-runnerの実行はMacOSの場合、Control + rです。すると、該当ファイルの実行結果が表示されます。

現状では、デフォルトのバージョンのPython2系が適用されているかと思いますので、上記でインストールしたPython3を適用する場合は、「Atom」 => 「Config」 と進み、「config.cson」というファイルに追記します。

Python3を指定した、以下の記述をconfig.csonに追記して保存します。

以下のコードを実行すると、変更されたバージョンの確認ができます。

ちなみにatom-runnerを閉じる時はescapeキーでできます。

以上です!ご覧いただき、ありがとうございました!!😀

スティーブ・ジョブズ(3巻) (Kissコミックス)

スティーブ・ジョブス Apple Steve Jobs
スティーブ・ジョブズ(3巻) (Kissコミックス)
スティーブ・ジョブス Apple Steve Jobs

第9話 ニューエイジの夜明け

アップル社の最初の投資家であったマイク・マークラは、初期のアップルの経営を大きく支えた存在であり、ジョブズはマイクから会社経営を学んでいく。1977年4月16、17日 サンフランシスコで開かれた第1回ウェストコースト・コンピューターフェアにて、アップルIIが初披露され、アップルIIは爆発的に売れ、莫大な利益をアップル社にもたらした。マークラはマイケル・スコットを引き抜き、彼をアップル初代CEOにする。スコットはAppleをより組織的にするため、社員番号を入れた社員証を発行したが、社員番号1は、ウォズに与えられ、ジョブズはこれをスコットに抗議する。ジョブズは結局、社員番号0を手に入れることで妥協した。

スティーブ・ジョブス Apple Steve JobsSteve Jobs

第10話 妊娠とDNA鑑定

ジョブズは交際していたクリスアン・ブレナンとの間に婚外子のリサ・ニコール・ブレナンが誕生しており、父子鑑定テストの結果、94.41%の確率で親子であると確認されているにもかかわらず、ジョブスは認知を拒否した。また、ジョブズは一切、生活費の援助をしなかったので、クリスアンは、リサを育てるために生活保護に頼らねばならなかった。ジョブズは「自分が父親になるというのがどういうことか想像できなかった」「事実と真っ向から向き合う事ができなかった」と語っている。

スティーブ・ジョブス Apple Steve JobsSteve Jobs

第11話 ゼロックスとリサ

アップルは次世代パーソナルコンピュータとして、Lisa(リサ)・プロジェクトが立ち上げられた。ジョブズは優秀なプログラマーのビル・アトキンソンに払い戻しのできない航空券を送り、アップル社へ招いた。ビルはLisa(リサ)やのちのMacintosh(マッキントッシュ) プロジェクトで、重要な役割を果たしている。また、ジョブズらはゼロックス社のパロアルト研究所を訪問した際に、グラフィカルユーザインタフェース(GUI)を搭載した「Alto」を見て、大きな衝撃を受け、開発中のLisaに、これと同じ機能を持たせることを考える。しかし、ジョブズがLisaプロジェクトを混乱させている原因と考えたCEOのスコットは、Lisaプロジェクトからジョブズを外した。

スティーブ・ジョブス Apple Steve JobsSteve Jobs

第12話 真のアーティストはシンプルに

Lisaプロジェクトから外されたジョブズは、1981年に突如としてMacintoshプロジェクトに乗り出す。Macintoshプロジェクトは1979年にジェフ・ラスキンが、開発を開始したものだったが、ジョブズとの対立の末、ラスキンはアップル社から去ることになった。取締役であったジョブズの働きで予算も増え、Lisaプロジェクトからメンバーや技術の引き抜きを行った。時には「現実歪曲フィールド」と呼ばれるほどに、無理難題を吹っかけ、一見、不可能と思われることでも、結果として偉業を達成していった。細部にまでこだわり抜き、開発は難航したが、ついに1984年1月、Macintoshは完成した。

スティーブ・ジョブス Apple Steve JobsSteve Jobs


【Rails】paranoiaで論理削除を実装する

RailsのActiveRecordの削除(delete)は、通常、物理削除になっており、実際にデータがデータベースから削除されます。それに対して、論理削除は実際にはデータを削除せずに、削除されたと見なすフラッグと呼ばれるカラムを設定して、ユーザーには削除しているかのように振る舞い、必要時には元の状態に戻せるものです。「ユーザーが退会した後も、システム上一定期間はユーザーのデータを保持しなければならない。」や「違反等があり、一時的にアカウントを凍結したい」などの場合に、論理削除が使えると思います。
Railsではparanoiaというgemライブラリを利用することで簡単に実装することができます。このgemはacts_as_paranoidというgemを再実装したものです。

GitHub
https://github.com/rubysherpas/paranoia

実行環境はこちらです

Gemのインストール

Gemfile

$ bundle install します。

カラムの追加

論理削除したいモデルに deleted_atとindexカラムを追加します。

マイグレーションファイルは以下の通りです。

$ rails db:migrate を実行します。

モデル

対象モデルに acts_as_paranoid を追記します。

これでparanoiaの導入は完了です。

コンソールで試してみる

通常通りに destroy を実行すると、deleted_atにタイムスタンプが入り、物理削除ではなく論理削除になります。

再度、findしても論理削除されたデータは取得できません。

物理削除をしたい場合は really_destroy! を実行します。

削除したデータの確認

論理削除したデータのみ取得する場合です。

論理削除したデータとしていないデータを合わせて取得する場合です。

論理削除したデータを除いたデータ場合です。

論理削除から元に戻す

restoreを実行します。

論理削除カラム名の変更

デフォルトではdeleted_atが論理削除のカラム名として使われますが、別名にしたい場合はcolumnオプションで指定します。

デフォルトスコープをスキップしたい

論理削除は使いたいがデフォルトスコープはスキップしたいという場合です。

Callbacks

コールバックは以下のように、メソッドを呼ぶことができます。

以上です!
そのほか、追いきれていないところもありますので、ドキュメントも参考にしていただけたらと思います!