【Mac】標準の画面分割機能SplitViewに使いづらさを感じている全てのMacユーザー向け

Macで画面分割できるアプリ「ShiftIt」が神がかっているのでご紹介。超今更感あるかもだけど。自分がわりと半年前くらいにやっと使い始めたもんで。 github.com

Macの画面分割って標準だとSplitViewがあるけど、フルスクリーンになっちゃってメニューバーとか隠れちゃうしショートカットも使えないしぶっちゃけ使いづらい。そんな悩みを完全に解消してくれるのがShiftIt。
詳しいインストール方法などは下記サイトの目次#3以降をご参照ください。とても分かりやすく説明されてます。 iphone-trouble.biz

全てのMac画面分割loverに幸あれ。

【CakePHP3】簡易あいまい検索

ドットインストールのCakePHP3レッスンにお世話になり始めて2日目。
基礎を学びつつ、応用して簡易あいまい検索機能(GET送信)を作りました。ブログを想定。タイトルにでも本文にでも検索ワードが含まれていれば該当記事がヒットする仕様。

# PostsController.php

public function index()
{
  if (isset($_GET['search'])) { # 検索ワードがGETで渡ってきていたら
    $posts = $this->Posts->find('all')->where([
      'OR' => [
        ['title LIKE' => '%'.$_GET['search'].'%'], # 検索ワードが含まれるタイトルを検索
        ['body LIKE' => '%'.$_GET['search'].'%'] # 検索ワードが含まれる本文を検索
      ]
    ]);
  } else { # 検索実行前は全記事一覧表示
    $posts = $this->Posts->find('all');
  }
  $this->set(compact('posts'));
}
# index.ctp

<?= $this->Form->create(null, ['type' => 'get']); ?> <!-- GETで送信指定 -->
  <?= $this->Form->control('search', ['label' => 'キーワード検索', 'default' => $this->request->query('search')]); ?> <!-- 検索実行後にフォームに入力ワードを保持 -->
  <?= $this->Form->button('検索') ?>
<?= $this->Form->end(); ?>
<table>
  <tr>
    <th>ID</th>
    <th>タイトル</th>
    <th>本文</th>
  </tr>
  <?php foreach ($posts as $post) : ?>
  <tr>
    <td><?= h($post->id); ?></td>
    <td><?= $this->Html->link($post->title, ['action' => 'view', $post->id]); ?></td>
    <td><?= h($post->body); ?></td>
  </tr>
  <?php endforeach; ?>
</table>

CakePHPはOR句の書き方が複雑でややこしいね。

【CakePHP3】Rails独学者が初めてCakePHP3を触って得た超基礎知識とRailsとの比較

これまでRailsを独学してましたが、業務でCakePHP3を触ることになったのでドットインストールにお世話になった1日目。
大前提の知識として大事だったこととして、CakePHPでは、Controller内で受け取ったデータをViewに渡す処理を書かなければいけないという点が重要。

# Controller/PostsController.php

# ブログの投稿記事一覧を取得する場合
$posts = $this->Posts->find('all')
                ->order(['created' => 'DESC']); # いろんな条件メソッドチェーンで繋げられる
# この$postsはそのままではViewでは使えないので、Viewでも$postsという変数(または任意の名前)で扱えるようにしなくてはいけない
$this->set('posts', $posts) # OR 全く同じ処理でこうも書ける→ $this->set(compact('posts'))
# Template/Posts/index.ctp

<ul>
    <?php foreach ($posts as $post) : ?>
        <!-- CakePHPではhtmlspecialchars()をh()と略して記述できる -->
        <li><?= h($post->title) ?></li>
    <?php endforeach; ?>
</ul>

$this->set()が、Railsでいうところのインスタンス変数に代入する的な感じだと思う。同じ処理をRailsで書くとこう↓

# controllers/posts_controller.rb
 
@posts = Post.all.order('created_at DESC')
# views/posts/index.html.erb
<ul>
    <% @posts.each do |post| %>
        <li><%= post.title %></li>
    <% end %>
</ul>

フォルダ構成もファイルの命名規則も微妙に違うからわりと混乱する><

【Ruby】英単語しりとりプログラム

Rubyの個人練習で、英単語しりとりができる超簡単なプログラムを書いた。 以下、簡単な説明付きでコード晒します。色々雑なので要注意。

def game(word)
  array = ['elephant', 'eggplant', 'reader', 'real', 'station', 'small', 'link', 'lion', 'tiny', 'time']  # 候補単語の配列(実用時には要カスタマイズ)
  first_letter = word.slice(-1) # 入力単語の最後の一文字を取り出す
  options = array.grep(/^#{first_letter}/) # 候補単語のリストアップ
  puts options.sample # 候補単語リストからランダムで1つ出力
end

game('apple') # => eggplant

万一間違いがあった場合はコメント欄よりご指摘ください。

【MySQL】レコードIDを1から振り直す【SQL】

開発環境で投稿の削除テストを繰り返したりやなんかしていると、データベースのレコードのIDが歯抜け状態になってくる。別にそのままでもいいんだけど、なんらかの理由でIDリセット(1から振り直す)したい時のSQLメモ。
ググると「一旦IDカラムを削除してから同名のカラムを追加し直す」みたいなのが結構ヒットするけど、その必要はありません。既存のレコードが残っているままの状態でももちろんOK。便利。

SET @i := 0;
UPDATE テーブル名 SET カラム名 = (@i := @i +1);

1行目で指定した数値+1から番号が振られるので、上記の例では1から連番が振られる。

【Rails】ターミナルを使わずにルーティング一覧を見やすく表示する裏技

開発中、ルーティングのネストしたりしててパスやヘルパーが訳わからなくなってしまった時とか、単純にルーティング一覧を見たい時に使える裏技のようなもの。
方法はとても簡単。開発中のアプリで絶対に存在しないようなURLにわざとアクセスしましょう。localhost:3000/yayとかなんでもいいです。すると当然Railsのエラーページが表示されますが、そこにルーティングの一覧が見やすく載っています。(スクショの通り)

f:id:ta539tg70:20181209162155p:plain
ブラウザ上のRailsエラー画面

もちろんターミナルでrake routesするのが正規方法だけど、それより見やすくて便利じゃないですか...?あとDockerで開発してる場合はrake routesするだけでもいちいちdocker-composeコマンド打たなきゃいけなくてめんどくさいというのもある...。

f:id:ta539tg70:20181209162841p:plain
ターミナルでrake routesした時

実際のところ裏技でもなんでもないけど。あんまり知られてない方法かな...?と。個人的にはこっちの方がよく使ってます。


余談

この記事を書くにあたってこの方法がどの程度マイナーなのかちょびっと調べてみたら、思わぬ方法を見つけました。ブラウザで確認したい時はlocalhost:3000/rails/infoにアクセスするのが正規方法らしいです。まぁ個人的にはタイプする文字数も少ないしlocalhost:3000/yayで十分ですけど...。

参考文献

【Ruby on Rails】ルーティングを確認する方法 - SakuraWi - BLog

【Rails】resourcesが訳わからなくなる人のためのド基本まとめ

ルーティングする際にかっこつけてresources使うけど、ネストとかしていくうちにprefixもURI patternも段々わけ分からなくなってくる私。毎回ググるのももう疲れたので自分でまとめることにした。似たような人がもし存在するのならばそんな人の役にも多分立つはず。ド初心者のための超基本のまとめなので、shallowとかそういうワンステップ上っぽいことには触れてません。

resources :posts # メイン7つ全て

resources :posts, only: [:◯◯, :△△] # 特定のアクションだけ

resources :posts, except: [:◯◯, :△△] # 特定のアクション以外
prefix verb URI pattern controller#action
posts GET /posts posts#index
new_post GET /posts/new posts#new
posts POST /posts posts#create
post GET /posts/:id posts#show
edit_post GET /posts/:id/edit posts#edit
post PATCH/PUT /posts/:id posts#update
post DELETE /posts/:id posts#destroy
# ネスト

resources :posts do
  resources :comments
end
prefix verb URI pattern controller#action
post_comments GET /posts/:post_id/comments comments#index
new_post_comment GET /posts/:post_id/comments/new comments#new
post_comments POST /posts/:post_id/comments comments#create
post_comment GET /posts/:post_id/comments/:id comments#show
edit_post_comment GET /posts/:post_id/comments/:id/edit comments#edit
post_comment PATCH/PUT /posts/:post_id/comments/:id comments#update
post_comment DELETE /posts/:post_id/comments/:id comments#destroy

indexcreateが同じprefixとURI pattern(HTTPメソッドで送信先を使い分ける)
showupdatedestroyが同じprefixとURI pattern(HTTPメソッドで送信先を使い分ける)


多分慣れてくるとshallowあたりを理解したくなってくるんだと思う。そんな時に読みたいメモ。 resources を nest するときは shallow を使うと幸せになれる - Qiita