ヘッダーに配置する項目

個人開発しているサービスのヘッダー改修のため、いくつかのサービスのヘッダーに配置されている項目をまとめました。

Facebook

  • サービスロゴ
  • 検索フォーム
  • プロフィール画像
  • ユーザー名
  • ホームリンク
  • フレンド
  • メッセージ
  • お知らせ
  • ヘルプ
  • 設定

Twitter

  • ホームリンク
  • モーメント
  • お知らせ
  • メッセージ
  • サービスロゴ
  • 検索フォーム
  • プロフィール画像
    • 設定
  • ツイートボタン

Github

  • サービスロゴ
  • 検索フォーム
  • Pull requests
  • Issues
  • Marketplace
  • Gist
  • お知らせ
  • 新規作成
  • プロフィール画像
    • 設定

まとめ

ベーシックなヘッダーのサンプル

Railsでいいね機能

個人開発しているサービスにいいねボタンをつけるためのメモ。

イメージ

  • 親テーブル
    • posts
    • comments
  • 子テーブル
    • likes

投稿にもコメントにも「いいね」できるようにしたい。

課題

親テーブルが複数ある時にテーブル設計をどうするか。

参考: 複数のテーブルに対して多対一で紐づくテーブルの設計アプローチ|日本橋のシステム開発会社|スパイスファクトリー株式会社

アプローチ方法

  • ポリモーフィック関連
  • 複数の関連テーブル(中間テーブル)
  • 親テーブルの作成
  • テーブルの分割

どれを選択するか。悩んだのでSQLアンチパターンを買って読みました。

SQLアンチパターン

SQLアンチパターン

合わせてmastodonも参考にしました。 mastodonでは、ポリモーフィック関連を採用しているようでした。

  create_table "notifications", id: :serial, force: :cascade do |t|
    t.integer "account_id"
    t.bigint "activity_id"
    t.string "activity_type"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "from_account_id"
    t.index ["account_id", "activity_id", "activity_type"], name: "account_activity", unique: true
    t.index ["activity_id", "activity_type"], name: "index_notifications_on_activity_id_and_activity_type"
  end

なるべくRailsに沿ってつくりたかったので、今回はmastodonを参考にPolymorphicで実装することにしました。

実装

命名については、ableを語基の後ろに付けるものと抽象名詞を使うものとがあるようでした。

参考:Rails ポリモーフィック関連の関連名の命名 - 130単位

このあと通知機能の実装も検討していて、そこでもpolymorphicを使用する可能性があったので、汎用性が高い抽象名詞を利用することにしました。

$ rails g model like activity:references{polymorphic}:index user:references
class CreateLikes < ActiveRecord::Migration[5.0]
  def change
    create_table :likes do |t|
      t.references :activity, polymorphic: true
      t.references :user, foreign_key: true

      t.timestamps
    end
  end
end
$ rake db:migrate
class Like < ActiveRecord::Base
  belongs_to :activity, polymorphic: true
  belongs_to :user

  validates :user_id, uniqueness: { scope: [:activity_type, :activity_id] }
end

class Post < ActiveRecord::Base
  has_many :likes, as: :activity
end

class Comment < ActiveRecord::Base
  has_many :likes, as: :activity
end

参考

フリーランス4年目の2017年前半振り返り

個人開発

いくつか個人開発でサービスをつくりました。最低限の機能のみですが、もやもやっとしたアイデアから機能を検討して開発を行いリリースするまでのプロセスに慣れることができました。一方で、リリースしたところである程度満足してしまい「さあどうしようか」となったところで、次のサービスの開発に移り、サービスのほとんどが自己満足で終わって使ってもらえない状態でした。その反省から、2017年の後半はプロダクトの成長方法の学習をひとつのテーマに置いてみたいと思います。

情報収集

世界を知りたい、特に先進国の現状を知りたいと思い、ヨーロッパを一周しました。街がどんなつくりか、地下鉄にどうやって乗るか、スーパーでは何が売っているかなど、気になることを見てまわりました。2017年の後半は、まだ行ったことのない日本の地方都市に行きたいと考えています。

業務委託

お世話になっている会社で週2~3日ほど常駐で開発に参加させていただいています。上長が優秀な方で、エンジニアが働きやすく開発に集中できる環境をつくっていただいています。開発に関しては、やりたいことが決まっていて、それ以降をまるっと任せていただいている状態なので、今後の課題として設計から実装まで個人レベルの底上げがあります。

その他

株式投資・仮想通貨・人工知能といった分野にも経験・研究のため取り組んでみました。株式投資は合わなかったためか、ほとんど放置している状態です。その他の2つについては、サービスを利用したりAPIを使って簡単に動くものをつくってみたりしている状態です。今後は、寄り道をしてもう少し趣味の範囲に落とし込み開発を楽しめる方法を考えてみたいと思います。

Rails5(Turbolinks5)でGoogle Analyticsを設置

Rails5(Turbolinks5)の環境でGoogle Analyticsを設置した時のメモ。

Turbolinks Compatibilityに掲載されている情報に古さが出てきていたので他の方法を調べていたところ、turbolinksのissuesで同じテーマのやりとりを見つけたのでこちらを参考にしました。

参考:Google analytics best practice? #73

<head>
  ...
  <% if Rails.env.production? %>
    <script>
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
      })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

      ga("create", "UA-XXXXX-Y", "auto");
    </script>
  <% end %>
</head>
document.addEventListener "turbolinks:load", (event) ->
  if typeof ga is "function"
    ga("set", "location", event.data.url)
    ga("send", "pageview")

AdSenseのissueは下記のリンクに上がっています。

参考

DEPRECATION WARNING: alias_method_chain is deprecated

Rails5で作業中に下記のWARNINGが表示されました。

DEPRECATION WARNING: alias_method_chain is deprecated. Please, use Module#prepend instead. From module, you can access the original method using super.

alias_method_chainが使用されているgemを調べます。
まずgemのインストール先を確認。

$ gem environment

インストール先のディレクトリに移動してalias_method_chainでgrepをかける。

$ grep -lir alias_method_chain ./

該当するgemを発見。
githubリポジトリchangelogを見たらfixされていたのでgemをアップデート。
WARNINGが表示されなくなったことを確認できました。

参考

Amazon EC2にSFTPで接続

Amazon EC2に「FTPで接続したい」と言われた時のメモ。

作業ユーザーを作成

$ sudo useradd hoge
$ sudo passwd hoge
$ sudo visudo
hoge    ALL=(ALL)       ALL

鍵の作成

$ sudo su - hoge
$ mkdir ~/.ssh
$ ssh-keygen -t rsa
$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys
$ chmod 700 ~/.ssh

秘密鍵を適当な名前でローカルに保存。

確認

接続を確認

ssh -i hoge.pem hoge@xx.xxx.xx.xx

書き込み権限を許可

sudo chmod o+w /var/www/html/huga

その他

エラー:Permissions 0644 for ‘hoge.pem’ are too open.

$ chmod 0600 hoge.pem 

参考

肩こり・腰痛対策のストレッチ動画

肩こり・腰痛対策のストレッチ動画メモ。


ニューストレッチ⑥(あべこべ体操) 30秒で首がほぐれてしなやかになる


『股関節をほぐせ』進化したストレッチ~ニューストレッチ(あべこべ)


ニューストレッチプログラム5ー30秒で床に手がつくようになる(立位)


ニューストレッチプログラムその5(座) 30秒でつま先に手が届く(長座)


ニューストレッチプログラム⑦~足を180度開けるかい?(あべこべ体操)


ニューストレッチプログラムその8~足を180度開けるかい?その2

まとめ

ニューストレッチプログラム