ogaaryo's ReadMe

作業効率化、開発、マネジメント、ツールなどの情報を発信中

RubyMineを感動的にするおすすめの便利ショートカットや設定を紹介

https://i.gyazo.com/1f3de4b14367b8fd4ca0ce833e234dea.png

JetBrainのIDEであるRubyMineですが、ショートカットやプラグインを設定することで圧倒的に便利になります。今回は個人的におすすめの設定や、ショートカットとおすすめの割当(キーマップ)を紹介します。

RubyMineは非常に多機能で使いこなすことが難しそう、調べるのめんどくさい。。。などのお悩みや不安がある方は、この設定やショートカットを真似して頂き、そこからご自身が使いやすいようにカスタマイズして頂くと、開発の作業効率が飛躍的に向上すると思いますので、是非お試しになってみて下さい。

まだRubymineをインストールしていない方はこちらからRubymineをインストールしてみてください。※紹介コード経由なので割引価格でご購入頂くことができます。

プラグインの設定

Railways

routes.rbに設定したpathやcontrolloer#action_nameなどをrubymineで簡単に閲覧することができるようになるプラグインです。rails routesコマンドlocalhost:3000/rails/infoにアクセスしたページをrubymineで確認できるというイメージです。

Railwaysの設定方法

  1. RubyMineのpreferencesを開きメニューからPluginsを開きます
  2. 検索ボックスでRailwaysと入力し、installボタンを押します
  3. rubymineを再起動するとrailwaysが使えるようになります。

https://i.gyazo.com/7f5064525290b72bdd1e9554527f3383.gif

ショートカットの設定

ショートカットの設定方法(keymapの設定)

RubyMineのpreferencesを開きメニューからKeymapを選択します。この画面でショートカットを設定していきます。

https://i.gyazo.com/ae03984666a1a5ca0bef315d6397eecb.png

画面を分割:Split Vertically、Split Horizontally

画面を縦に分割

  • おすすめkeymap : shift + command + v

https://i.gyazo.com/b681369dd28be796ebbf7aa514bda884.gif

画面を横に分割

  • おすすめkeymap : shift + command + h

https://i.gyazo.com/c26b87ae904f119c90ffe88ccb79c88f.gif

分割した画面間の移動:Goto Next Splitter、Goto Previous Splitter

分割後の画面を行き来することができるようになります。

  • おすすめkeymap : shift + command + kshift + command + l

https://i.gyazo.com/5c9e6e34e8bc853a129764cfdb7c5f7e.gif

コードジャンプ:Jump to Source

ソースに移動することができます。デフォルトではcommand + clickですが、とても良く使うのでショートカットを設定しておくと非常に便利です。

  • おすすめkeymap : F2

https://i.gyazo.com/3387d6179bd9676b18c1102cdcb4f6cf.gif

前の画面に戻る:Back

こちらもよく行う動作なので、絶対に設定しておきたいショートカットです。

  • おすすめkeymap: alt + command + ←

https://i.gyazo.com/987960b9c800c3d21d5d0042dcefe1d9.gif

拡張・縮小選択:Extend Selection ・ Shrink Selection

特定の範囲の選択を一発ですることができるようになります。単語やセンテンスをコピーすることが多い時に非常に役立ちます。

  • おすすめkeymap: shift + command + ↑shift + command + ↓

https://i.gyazo.com/d85631b83d10da56661ada2fe18e7838.gif

プロジェクト・ディレクトリ全体検索

プロジェクト全体や特定のディレクトリ以下など指定をして検索を実行することができます。

  • おすすめkeymap: shift + command + f

https://i.gyazo.com/277df6d262e931b7a41cf1c2b5d8861a.gif

コード整形:Reformat Code

コードを整形してくれます。

  • おすすめkeymap: alt + command + l

https://i.gyazo.com/dd1ea9e97648f7f57c0fa9e9e59b65c1.gif

model・controller・viewにジャンプする:Switch to Model、Controller、View

命名規則通りに作成されている場合に、model、controller、viewを行き来することができます

  • おすすめkeymap(model): control + m
  • おすすめkeymap(controller): control + c
  • おすすめkeymap(view): control + v

https://i.gyazo.com/b20f9f5134ac891889cf5fb8d13b4cbb.gif

左右のタブを移動する:Select Previous Tab・Select Next Tab

ソースファイルの左右のタブを移動することができます。こちらかなり使うことが多いショートカットです。また、キーマップの割り当てとしては、Chromeのショートカットと合わせているので、普段から使い慣れていくことができます!

  • おすすめkeymap(previous tab):shift + command + [
  • おすすめkeymap(next tab):shift + command + ]

https://i.gyazo.com/2def6c6dbd5c6981d6dfcec9c4cd5bfe.gif

リーダーとは何をする人なのか?リーダーの資質や技術について整理してみた

ベンチャー企業や小さな組織で働いている方、大企業や大きな組織で働いている方。人それぞれ働く環境はありますが、共通して言えるのはリーダーが存在しているということだと思います。

仮に役職としてのリーダーがいないとしてもリーダー的な存在という方は必ずいらっしゃると思います。

特に小さな組織や日々新しい問題が起きる環境に身を置いてみるとリーダーの存在の大事さを身にしみて感じます。

また、新規事業や新規サービスを立ち上げていく時などは本当にリーダーによってその後の結果が大きく変わることを何回も体験してきました。 そんな体験の中から、事業やサービスを作るためのリーダーとは何をする人なのか?どうあるべきなのかを整理していきたいと思います。

リーダーに必要な技術と資質は何か?

なぜリーダーが必要になるタイミングとしては、課題に対しての解決プランが複数存在している場合だと考えています。 課題に対して、リーダーは【打ち手(課題解決プラン)を、自分で考え、決め、伝え、率い、行動する】必要があります。

https://i.gyazo.com/6b78406ce57ed88bf1ac4691244502ea.png

リーダーは全てやらなければならない

  • 考えるだけではダメ、決めなければいけない
  • 決めるだけではダメ、伝えなければいけない
  • 伝えるだけではダメ、率いなければいけない
  • 率いるだけではダメ、行動しなくてはいけない

https://i.gyazo.com/44b6970cfa312d475db6e7c7352368c4.png

リーダーに必要な意識

  • ビジョンや夢を語り、突破の打ち手を明確にする
  • 各論に強くて、夢がある
  • 最終的には実行・実行・実行だが、重要なのは手前の部分

https://i.gyazo.com/fa6c695ee88bc9ce410bdc98048125cc.png

リーダーの技術が足りない場合の疾患

リーダーが多くの打ち手を考えて、これをやらないと不安、ふれをやらないと危険とリーダーが迷って決められないと、打ち手がアレも、コレも、ソレもになる 打ち手がアレも、コレも、ソレもだから、現場は、ドレも、コレもソレも出来ない

リーダーが迷っているから、現場の体が動かなくなり機能不全に陥り、結果がでない。

何が悪いのか?だれが悪いのか?あえて犯人探しをするとすればリーダーが決めないことが全ての原因

迷っている→わかりやすく整理できない→整理できていないから→人に上手く伝えられない→伝えられないから→打ち手が組織全体に浸透しない

問題の本質はいつも「決めてない」ことと「伝えてない」こと。

なぜ決めないのか?自分の失敗が怖い(←突き詰めるとこれ)

なぜ伝えないのか?伝える技術を磨いていない

→自分の得意分野を磨いているが、自分が理解するのと、他に理解してもらうのは違う

→この技術を身に付けていかなければならない

https://i.gyazo.com/9532e97e363543aa09c4dfed2dd1d002.png

リーダが問われる資質とは?

今まで整理してきたことからリーダーの資質を一言でいうとすれば、「決めて伝える」力こそがリーダーの資質です。 アイディア坊やではリーダーは務まりませんし、ただただ行動しているだけでも不足しています。

色々な課題解決プランがある中で最良の打ち手を導きだし、決定して、それをメンバーに伝えることができる力がないとリーダーにはなれないです。

リーダーポジションになりたい方、既になっている方はもう一度ご自身でリーダーとは何か?何をすべき人なのか?を整理して考えてみると、 今まで上手くいかなった原因や解決方法が見つかるかもしれないのでおすすめです!

エンジニアはどんな仕事をしてる?プログラミングは実は重要じゃない?

一言にエンジニアといっても、仕事が多岐に渡っているのでその実態を掴むことが難しいと感じている方も多いと思います。

そんなあなたに向けて、エンジニアとはどんな仕事をしているのか?プログラミングだけが仕事じゃないのか?などの基本的なことから、あなたの転職やスキルアップを考える上でどんなエンジニアを目指すべきなのかをお伝えしていきたいと思います。

プログラミングだけが仕事じゃない

エンジニアの仕事というと、プログラミングをしているイメージがとても強いと思います。プログラミングだけをやっているとお持ちている人もいると思います。

はっきり言います。そのイメージは間違っています。

プログラミングは仕事の10%~20%の割合

実はエンジニアの仕事の中でプログラミングをしている割合は10~20%なんです。

もちろんプログラミングをすることが大好きな人が多いですし、時期によってはプログラミングだけをしている期間もあります。

ただ、断言できるのは年間を通じて考えてみるとエンジニアはプログラミングをする時間よりも、それ以外のことをしている時間の方が圧倒的に長いです。

では、エンジニアは何をしているのか?

それを理解するために、まずはプログラマーとエンジニアの違いを説明します。

プログラマーとエンジニアの違いは?

プログラマーとエンジニアの違いは色々な言い方をされます。

一つの代表例としては「エンジニアは建築士」「プログラマーは大工」と言われています。

ただ、私はそれは違うと思っています。

エンジニアは家を1人で建てる人

前述の建築士や大工という例えは、家を建てる上での役割分担として例えられています。

実際に家を建てるときには、デザイナーや大工、建築士や施工主など多くの仕事が分担して1つの家を建てていきます。

なぜ役割が細分化されているかというと、1人では到底追いつかない仕事量があり、生産性やスキルが追いつかないからです。

物理的なものの最初単位がアトムならば、電子の世界はビットで構築されています。

アトムでは1人で家を建てることは不可でも、ビットではそれが可能になります。

なぜアトムとビットで違いが生まれるのでしょうか?

エンジニアの世界では生産性が何百倍にもある

一番の違いは生産性です。例えば大工さんは熟練の技術を手に入れても生産性を何百倍にも向上させることはできません。

エンジニアは違います。

熟練のエンジニアとそうで無いエンジニアの生産性を比較すると何百倍、それ以上の生産性の違いが生まれます。

言うならば魔法のような生産性を生み出すことができるからこそ、1人でも家を建てることができるようになる要因です。

なぜエンジニアはプログラミングをしているイメージが強いのか

一言でいうと、家を1人で建てることをしていないエンジニアが多いからです。

つまりは、自分でサービスを作らずにいる人が多いということです。

本来であればその無限の生産性を駆使して、サービスを作っていくべきはずが、建築士的なエンジニア、大工的なエンジニアとして仕事をしてしまっている人が多いことによって、世の中のイメージがプログラミングに向いてしまっているのでは無いかと思います。

エンジニアになるためにはどうしたらいい?

エンジニアにこれからなろうとしている方に言いたいのは、周囲の人にひっぱられずに自分のスキルや技術を磨くだけでは無く、サービスを作れる人になることを目指して欲しいです。

エンジニアの仕事とは建築士や大工では無く、それを全て1人でやっていくことです。

全てとはつまり、サービスを作っていくことです。

目指すべきエンジニア像を探そう

目指すべきエンジニアを見つけることができれば本当の意味でエンジニアになれるチャンスが巡ってきたと言っても過言ではありません。

技術的に優れた人では無く、サービスを作れる人を探してみてください。

エンジニアの未来

これからはよりエンジニアがエンジニアらしく生きる時代になると思います。

つまり1人1人のエンジニアが自分のサービスを持ち、自律し、世の中に新しい価値を提供していく時代です。

まずは本当に自分が作りたサービスを見つめ直した上で必要な技術を磨くことをおすすめします。

どうやってサービスを見つめ直すのかということは以下でも書いているのでご興味がある方は是非参考にしてみてください。

www.ogaaryo.com

エンジニアになりたい人はまずサービスをリリースすることに集中しよう

これからエンジニアになっていきたい。でも最初に何をしたらいいかわからない方に向けた記事です。

色々な思いがあり、エンジニアを志している人は多くいらっしゃると思います。

そんな中でまずはサービスを考えるところ初めて見ませんか?という提案です。

なぜサービスを考えることが重要なのか?

エンジニアにとってサービスを考えることがなぜ大事なのか?

そもそもエンジニアのミッションはテクノロジーを使った価値提供をすることです。

つまりサービスを作り、世の中に価値提供していくことこそがエンジニアであり、プログラミングはその手段です。

エンジニアを志している方の多くはまずはプログラミングの勉強を初めてしまいます。 その中で挫折をしてしまったり、躓いてしまっている中で、いつしか本当に作りたかったサービスまで忘れてしまうことが多くあります。

目的から目を背けずひたすらサービスを考えることができる人は、プログラミングやデザインなどはそのサービスを成立させるための手段だと考えることができるので、本当にやりたかった価値提供を行うということにたどり着けると思います。

作りたいサービスと技術選定

「作りたいサービスを明確にする」→「それを実現する方法を調査する」→「サービスをリリースしてグロースさせる」という3つの工程を行っていきます。

この作業は1つ1つに難しさがあり、同時に行ってしまうと余計に難しく感じてしまいます。

細かいやり方を学ぶ前にまずは自分が作りたいものを明確にした上で、それを成立させる言語やライブラリなどを探していく技術選定を行うことが効率的です。

私も技術選定はとても悩みますし、エンジニアとして一人前の人でもかなり悩むポイントが多くありますので、まず最初は独学では近くの誰かに相談をすることをおすすめします。

作りたいサービスを明確にする→技術選定という流れをしっかりと意識して、難易度を下げることが重要です。

サービスを考えるとは?

そもそもサービスを考えるとは何かを考えてみます。

サービスを考えるフレームワークはとても多くあります。 新規事業や新規サービスを考える上で、代表的なものとしてはリーンキャンバスがあります。

kigyotv.jp

こういったフレームワークはあるものの、あくまでフレームワークはフレームワークなので、本質的には以下のことを考えればいいと思います。

このサービスは誰に、何の価値を提供しているのか?

言い換えると何屋で誰がお客さんなのか?ということです

まずはこの問いに対してシャープに回答ができているかが重要だと思います。

開発を進めていくための準備

開発を本格的に進めていくためには、サービスを具体化していく必要あります。

この具体化の作業は技術選定の前に行います。

大事なのはこの段階ではまだ技術選定を行わないということです。 つまり、どのプログラミング言語を学ぶか、デザインはどうするか?などは一切考えないということです。

では具体化とは何かをご説明します。

画面を手書きしてみる

まずはビジュアルを具体化していきます。いわゆるワイヤーフレームを作るという作業になります。

ワイヤーフレームを作るという作業において、色々なツールがありますが、そのツールに慣れることが目的化しやすいのでまずは手書きで画面を書いてみることをおすすめします

機能を列挙してみる

画面が手書きで書けたら次は機能を列挙します。手書きのワイヤーフレームから機能を抽出する作業です。

例えば、メッセージ機能がある、チャット機能がある、決済機能があるなどです。

なぜ機能を列挙する必要があるかというと、この機能によって技術選定が変わるからです。 機能が明確になっていないとどの技術でそれを実現できるかを検討できないので、おおまかにでもいいので機能を列挙しておきましょう。

技術選定と開発

ここまでできてやっと技術選定や開発を行っています。 自分で開発を学びながら、自分が作りたいサービスを実現できそうな技術を見つける作業を行っていきます。

注意点としては、まず最初は独学でやってみることをおすすめします。

誰かに相談せずに最初の1週間はわからないなりに四苦八苦する経験を1度経験しておくと、誰かに相談をした時の学習効率が全く違うはずです。

四苦八苦が十分できたら、そこからは相談できる誰かを早急に見つけましょう笑

この四苦八苦期間が長すぎると挫折してしまいますし、あんなに作りたかったサービスをリリースすることにすら興味を失ってしまいます。

技術選定や開発を相談できるサービスの例としては以下のようなものがあります。

プログラミングスクール

プログラミングスクールに実際に通ったり、ビデオチャットでやり取りをしながら学ぶ方法があります。

ただし個人的にはあくまで開発の方法を教えてくれるだけなので、サービスをリリースするということに集中することが難しいのでは無いかと思います。

個人のメンターに相談する

僕が一番おすすめする方法は個人の信頼できる方を見つけてその人に、サービスのことも開発や技術選定もがっつりと相談することです。

私もサービスを作り始めた時は、友人に毎日、毎日わからないことや仮説をひたらすら相談しながら色々なものを吸収していきました。

スクールではなかなか相談できないことも、個人間であれば相談の範囲が明確に決まっている訳ではないので、色々なことを聞くことができ、 「何がわからないのかがわからない」という状態を抜けることができると思います。

現在、以下のサービスでメンターを行っていますので、もしご興味があればまずはご相談いただければ、全般的にご相談に乗らせていただきます!

menta.work

RailsでRss Builderを使用してCDATAで文字を囲む方法

Rssの配信をRailsで行う際に細かい仕様を突破する必要がある場合があります。

今回は強引にRssBuilderを使用して、やや強引に細かい仕様を突破していく方法をご紹介します。

RailsでRssBuilderを使用して頑張らないといけない方の参考になればと思います。

今回の題材では以下の仕様を突破する必要があることを想定しています。

Rssの仕様

  • CDATAで文字データを囲む必要がある
  • CDATAは改行(ネスト)しないようにしたい

CDATAでネストしないRss Builderの書き方

早速ソースを公開しています。 結論からいうと以下のように実装するとCDATAでネストしないRss Builderの書き方になります。

xml.instruct! :xml, version: '1.0'
xml.rss('version': '2.0', 'xmlns:dc': 'http://purl.org/dc/elements/1.1/') do
  xml.channel do
    # インデント分だけ空白を追加しています
    xml << "    <title><![CDATA[タイトル]]></title>\n"
    xml << "    <description><![CDATA[概要]]></description>\n"
    xml.link 'URL'
    xml.image do
      xml.url 'ロゴURL'
      xml.title 'サービス名'
      xml.link 'ロゴURL'
      xml.width 'イメージ幅'
      xml.height 'イメージ高さ'
    end
    @articles.each do |article|
      xml.item do
        # インデント分だけ空白を追加しています
        xml << "      <title><![CDATA[#{article.title}]]></title>\n"
        xml << "      <description><![CDATA[#{article.description}]]></description>\n" if article.description?
        xml.pubDate article.updated_at.to_s(:rfc822) if article.updated_at?
        xml.guid "記事URL"
        xml.link "記事URL"
        # インデント分だけ空白を追加しています
        xml << "      <category><![CDATA[カテゴリ名]]></category>\n"
      end
    end
  end
end

そもそもなぜRssで細かい仕様を突破する必要があるのか?

例えば外部のサービスと連携をする場合には、外部サービスのクローラーが取得しやすい形式でRSSを配信する必要があります。

この場合はそのクローラーの仕様に合わせてRssの配信形式を変更する必要があり、今回自分が対応した経緯も外部連携がきっかけでした。

やや強引な方法での実装を行ってしまっていますが、こういった事情でやむなく実装を強引に行うことは多々あると思うので、何かのご参考になればと思います。

どこでこういう方法を知るの?

こんな感じで突破する技術はあまり表には出ないものです。なぜなら、我ながらスマートな方法では無い自覚があるので、あまり表に出したく無い心理は理解できます。。。

ただ、現場では突破する力も非常に必要になり、それがビジネスを助けるということが往々にしてあるのも事実です。

このような方法は表に出ない傾向があるので、誰かに直接相談ができる方法を持っていると良いと思います!

私も以下のサービスでメンターを行っていますので、同じような悩みをお持ちの方は是非ご相談ください!

menta.work

【これからエンジニアを目指す人へ】現役エンジニアが本音で語るエンジニアになるメリットと得られるもの

エンジニアになりたい、目指している方に向けてエンジニアになると何が得られるのか、最大のメリットは何かを現役エンジニアの私が本音で紹介します!

自己紹介

大手メガベンチャーでエンジニアとしてキャリアをスタート。その後、スタートアップの立ち上げからジョインしてエンジニアリング、グロースハック、サービスの企画・設計などなど事業全体の業務を行ってきました。

なので、社員としてのエンジニアと、裁量権を持ったエンジニアの2つを経験していて、その2つの経験をもとにエンジニアになるメリットや得られるものを紹介します。

最大のメリットは自分の人生をコントロールできやすくなる

最大にして最強のメリットはこれに尽きると思います。

人生をコントロールする上では人生を構成する要素を分解しなければなりません。私が思う人生の構成要素は、

  • お金
  • 時間
  • 場所
  • 出会い

この4つが自分の人生を構成している要素だと思っています。

お金をコントロールする

エンジニアになるとお金をコントロールすることができます。お金とは2つの要素があります。まず1つ目は給料です。エンジニアは売り手市場なので、給料が高いです。はっきり言います。高いです。

自分は現在、採用も行っているのでエンジニアを採用する上で大体どれぐらいの給料を用意すべきかということを知っているのですが、はっきり言って他の業種と比較してもエンジニアの給料は頭1つ抜けていると思います。

また今後も考えてもエンジニアの給料はより高くなっていくと予想しています。

以前から海外のエンジニアを採用・オフショアなどを活用して開発を行う取り組みが盛んに行われており、海外のエンジニアの給料は日本のエンジニアに比較してまだ安い国が多いので、取って代わられるという意見も出ていましたが、正直言って完全に置き換えられるということは無いと思っています。

日本語・日本独特の文化の2つの要因があるので、なかなか海外のエンジニアを使ってプロジェクトを進めても上手くいかないことが多いためです。

当然、日本という国が先細っていくということはあるかもしれませんが、それはエンジニアに限った話では無く、他の職種と比較すれば確実に最後の最後まで給料面は有利になると考えられます。

時間・場所をコントロールする

社会人にとって、何時から何時まで・何曜日から何曜日まで、どこで働くのかということに大きく人生を左右されます。

エンジニアは時間と場所を選ばない仕事なので、自分を選択することができます。色々な会社で裁量労働制・リモートワーク可という形態でエンジニアを雇用することが多くなっています。

そのため、この2つの要因をコントロールしやすいということが言えると思います。

出会い

エンジニアはひきこもって1人で開発だけを行っているイメージを持たれている方も多くいらっしゃるかと思います。実はできるエンジニアほど多くの人ととのつながりを持って、助け合いながら開発を行っています。

また、エンジニアは日々勉強の毎日です。覚えることや理解していかなければいけないインプットや、自分が実際にアウトプットを出して学ぶことも非常に多いです。

そんな新しい世界と毎日出会うことができるので、昨日とは違う自分にも出会うことができると思います。

最後に

エンジニアにこれからなりた方は多くいると思いまし、悩んでいる方も多くいらっしゃると思います。 その悩みを突破することができれば自分の人生をよりハッピーな方向へコントロールできるようになりますので、一緒に頑張っていきましょう!

もし、このような話を深く相談したい方がいましたら、以下のサービスでメンターを行っていますので1度ご相談頂くのもありだと思います!

menta.work

【挫折しないために!】Railsでサービスをリリースするまでのステップを紹介!Railsの開発を行う前に読んでください!

開発を学び、エンジニアになりたい方のご相談に乗っていますと、最初からプログラミングの勉強を始めてしまう方が多いと感じています。

私も最初からプログラミングを学び始めてしまったため、数多くの挫折を経験してきました。。。

そんな経験から、どうすれば挫折せずに短時間で効率的にエンジニアとして成長することができるのか?ということを考え始めた時に、キーワードとしては「全体像の理解」・「効率化ツールの導入」・「サービスを作る」という3点に辿り着きました。 もちろん、エンジニアとして成長していくためには各論のプログラミングやネットワーク、インフラなどの理解が必要になって来ますが、大事なのは【自分にとっって必要な知識を必要な時に学ぶ】ということです。

なぜなら、この領域は日々新しいものが出てくるので学ぶことは無限にあります。その全てを学ぶことは不可能ですし、その必要性もありません。また、これからエンジニアになっていきたいと考えている方の中でも、学習に使える時間は人それぞれ違いますし、社会人の方であれば無限に時間を使うことはできないと思います。

如何に効率的に、時間を圧縮して必要な分だけ学習していくかがとても大事になります。

この記事がどなたかの時間効率、学習効率を上げることにつながれば幸いです!

まずは、これからエンジニアになっていきたい、サービスを作っていきたい方によくある間違った勘違いを整理していきたいと思います。

よくある勘違い

エンジニアとして実務経験が無い方が学習を始めた時に陥りやすい勘違いについて紹介していきます。エンジニアとして学習を進めていく上で間違った進め方をしないようにようにまずは、間違った認識を変えていきましょう!

プログラミングスクールに通えばエンジニアになれる

エンジニアにとってプログラミングは仕事の10〜20%程度だと考えています。そのためプログラミングのみに数ヶ月間の時間を使ってしまうのは非効率です。エンジニアにとってのプログラミングとは何かについては以下の記事で解説しているので興味がある方はご一読ください。

www.ogaaryo.com

最初の1歩は本やネットの教材を参考にして勉強すればいい?

これもよくある勘違いですが、本やネットの教材で1章から進めて最終章までたどり着けば全体像を理解することができると考えている方が多くいらっしゃいます。

プログラミングスクールにも言えることなのですが、教材のほとんどは開発環境を整えるということに着眼されていません。なぜ環境面についてそこまで言及されていないかというと、プログラミングスクールも教材もあくまでプログラミングを勉強するということが目的になっており、エンジニアになるということは主目的では無いからです。

また、開発ツールは有料のものも多く、利害関係もあるためツールを率先して紹介することができません。

プログラミングを学び始めた方が使っているツールを見ると、はっきり言って現場でそんなツールを使用して開発をしている人間はほとんどいないと言っていいレベルのものを使っている方がほとんどです。

この開発環境が整っていない状態やツールを導入していない状態で、プログラミングの学習を開始しても非常に非効率になってしまい、無駄な作業が増えてしまいます。

なので、まずは開発環境やツールを導入し、効率的に学習を行うことができる状態を作っていくことがとても重要になります。

この記事では開発環境やツールなどの初期に導入すべきものを網羅的に紹介していきますので、まずはこの記事を読んで頂き、その後に自分が使用していきたいものを検討していくことをおすすめします。

最初は無料のツールで十分なので有料のツールは買わなくて良い

そもそも無料・有料に限らず、ツールや環境を整えるということの重要性について最初は理解がしづらいと思います。

これは断言できるのですが、無料・有料に限らず、本当に良いツールを導入することにとて作業効率は何百倍も変わっていきます。

有料ツールの中には高機能過ぎて初心者には扱えないものも確かにありますが、初心者だからこそ率先してツールにお金を使うべきであり、色々なものを試していく必要があります。

例えばプログラミングスクールは安くても月10万円ぐらいはかかってしまうので、それを考えれば年間で1万円ぐらいのツールを購入しても十分におつりがくると思います。

参考ではありますが、自分はエンジニアを始めて約10年ほど経ちますが純粋な開発ツールへの投資額はざっくり20万ぐらいだと思います。本業でかなりストイックに開発を行っていても年間2.5万円ぐらいの出費です。

この記事で紹介しているツールは自分が実際に使用して作業効率化できたものの中で初心者の方にも是非使ってみて頂きたいものなので、ご検討頂けると良いかと思います。

PCを購入する

これからエンジニアを目指す方にとってPC選びが重要なポイントになります。エンジニアにとってのPCは相棒のようなものです。例えばWindowを購入すればいいのか?MACを購入すればいいのか?という点がまずわからないという方も多いのではないでしょうか?

結論からいうと、PCはMACを購入してください。そしてモデルは以下がおすすめです。

MacBook Pro (Retina, 13-inch, Early 2015) - 技術仕様

このモデルをかれこれ3年以上使用していますが、スペックは申し分なく開発やその他の業務をストイックに行っても不満は全く無く使用できています。また、故障も無くとてもおすすめのモデルです。

私の友人もこのモデルを使っている人が多く、これからエンジニアになっていく方には胸を張っておすすめができます

PCやブラウザのセットアップ

Railsの開発を行っていく前にまずはPCやブラウザのセットアップを行っていきましょう。PCやブラウザはアドオンと呼ばれる拡張機能やツールを導入することで飛躍的に使いやすく、効率的なものになります。

開発に限らず作業効率を上げていくために、まずはPCとブラウザの環境を整えていきましょう!

macの環境を整える

www.ogaaryo.com

chromeの環境を整える

www.ogaaryo.com

www.ogaaryo.com

Railsの全体像を知る

まずはRailsの全体像を理解する必要があります。Railsは書籍やネット上のドキュメントも充実していますが、まずはざっくりしたRailsの全体像を理解してから各論の仕様を知っていくことで学習効率が上がります。

MVCを理解する

RailsはMVCというフレームワークによって構築されています。このMVCを理解することによってRailsの全体像を把握しやすくなります。まずはMVCをざっくりと理解していきましょう。MVCについては以下の記事をご参考にしてください。

www.ogaaryo.com

開発環境を整える

Railsの環境を構築する

Railsの全体像を理解した後は開発環境をセットアップしていきます。開発環境のセットアップは初学者にとって最初の壁ですが、1つ1つのコマンドやライブラリーを理解していくことが重要です。手順としては以下を参考にしてみてください。

www.ogaaryo.com

ツールを導入する

Railsの開発環境がセットアップできたら、開発で特に使用するツールを導入します。必須で導入を検討したいツールは以下を参考に検討してみてください。

www.ogaaryo.com

最後に

まずこの記事でRailsの全体像や開発に必要なツールなどの準備が整ったと思います。次からは実際にどうやって開発を進めていくのか?効率的な学習方法などをご紹介していこうと思います!

開発も雑務もきっと楽になる!macの作業効率を上げるツールを紹介!

https://i.gyazo.com/75d1a91262c1c26289f1d9769320bdd4.png

macはwindowsに比べて周辺ツールが少ないと感じる方も多くいらっしゃるのではないでしょうか?そんなmacの本当におすすめのツールをご紹介します!是非、ツールをインストールしてご自身の作業効率アップにお役立てください。

Chrome日本語入力(IME)

www.google.co.jp

保管機能、サジェスト、入力感どれをとっても最高に使いやすいIMEだと思います。これを入れるだけでもかなり作業効率が上がります。

英かな

※英字配列のキーボードを使っている人のみ対象

⌘英かな

英字配列でも日本語配列のキーボードと同様にスペースキーの横のcmdで英かなを切り替えたい方にとっては最高のツールだと思います。

karabinder

※外付けキーボードかつ、リアルフォースなどのWindows配列のキーボードを使いたい人のみ対象

Karabiner - Software for macOS

どうしても静電式のキーボードを使いたい人にとっては必須アプリ。

Evernote

メモアプリはMac純正のノートも優秀ですが、私は圧倒的にEvernoteをおすすめします。Evernoteは単純なメモアプリにとどまらず、自分の仕事での学びや思考整理、議事録などなど、全ての出来事やナレッジを記憶することができる、外部記憶装置だと思っています。

Evernoteの優秀さとしては、検索機能にあります。検索機能が非常に優秀なので、極論を言うとカテゴリ分けやタグ付けなどを行わずにどんどんノートを作ってしまえば、検索して情報を簡単に引っ張り出せると思います。

私は使い始めて既に約8年経ちますが、未だに手放すことが想像できない最高のアプリの1つだと思います。

まずはこちらからアカウントを作成して、Evernoteの快適さを実感してみて下さい。

Gyazo

gyazo.com

Gyazoはキャプションを撮影してその画像を共有しやすい形式で扱うことができるツールです。macのキャプションでも画面を撮影することができますが、imageファイルになってしまうので共有することが難しい場合があります。また、ブログを書く時などはGyazoを使うことでわざわざ自分でアップロードすることなくそのまま画像を使用することができるので、ドキュメントの作成やブログなどを行う方は是非お使いになってみてください!

Gyazoには有料プランと無料プランがありますが、まずは無料プランでお試し頂くことをおすすめします。

alfred

www.alfredapp.com

alfredはいわゆるランチャーアプリといわれる、アプリやWebページなどを直感的に検索し、起動や表示を行うことができるものです。Macの純正のspotlightに近いのですが、alfredはspotlightよりも多機能であり、かゆいところに手の届く機能が全て搭載されていると言っても過言ではありません。

最も便利なのは、webページを検索ボックスから開くことができる機能です。この機能を活用することでブラウザのブックマークを一切使わなくて済むようになります。 ブックマークを使わなくなるとこんなにも作業が楽になるのかと、しみじみ実感できるので、是非インストールしてみてください。

Franz

meetfranz.com

私はSlack、Fbメッセンジャー、Skypeなどのメッセージアプリを複数またがって使用しており、またGoogleカレンダーやツイッターなどのアプリも常時使用しております。このよく使うアプリを1つのアプリの中で簡単に切り替えを行うことができるツールです。

好き嫌いが分かれるツールですが、私はこれを使うことで画面の移動がかなり少なくなり、作業効率があがりましたので、まだ使っていない方は一度お試しください。

Clipy

clipy-app.com

Clipyはクリップボードの履歴を残すことができ、定型文などを設定して簡単に呼び出すことができるます。コピーした時に間違っって他のものをコピーしてしまい上書きしてしまった経験はないでしょうか?また、同じものをコピーすることは作業効率を下げてしまいますし、何よりストレスがたまります。

Clipyを導入することで手間もストレスも軽減され、あなたの作業効率を上げてくれること間違いなしです!

Feedly

feedly.com

FeedlyはRssを購読するためにいわゆるRssリーダーというものです。日々の情報収集でRSSを活用すると最新の情報を効率的に集めることができます。

Feedlyは直感的に設定ができ、使いやすいので、これからRSSを活用した情報収集をしていこうとお考えの方は、Feedlyをインストールしてみてはいかがでしょうか?

HyperSwitch

bahoom.com

画面の切り替えを行う時にcommand + tab で行うと作業の切り替えがスムーズに行うことができます。ただし、macのcommand + tabの動きとwindowsのcontrol + tabの動きは若干異なり、windowsからmacに変更した方の中では違和感を感じる方が多くいらっしゃるのではないでしょうか?

私も最初はこの動きの差に使いづらさを感じていたのですが、このHyperSwitchを入れることでその悩みは解消されました。

特にwindowsからmacに切り替えた方はこのツールを入れることで、同じ悩みを解消できますので、是非インストールしてみてください

magnet(有料)

Magnet マグネット

Magnet マグネット

  • CrowdCafé
  • 仕事効率化
  • ¥120

開いているウインドウの配置、サイズ変更をショートカットで実行できます。類似アプリやmac純正の機能でもありますが、使い勝手を考えるとmagnetがおすすめです。

Memory Cleaner

Memory Cleaner: Free Up RAM

Memory Cleaner: Free Up RAM

  • Nektony
  • ユーティリティ
  • 無料

メモリの残量が可視化され、不要なアプリのプロセスを止めることもできます。また、メモリのキャッシュもクリアできるので一時的なクリーニングやモニタリングなどに重宝します。

RailsのMVCの役割を紹介!処理の流れからわかりやすく解説!Model,Controller,Viewの役割を理解しましょう!

Railsの学習をする上でまず最初に出てくるキーワードとしてMVCがあります。プログラミング初学者の方にとってMVCの説明は難しく、理解に落とし込むことができない方が多くいらっしゃいます。この記事ではMVCの概念の説明というよりは、実際にRailsの処理の流れからModel、Controller、Viewの役割を解説していきます。

まずは以下の画像を見てください。

https://i.gyazo.com/eccc097958fc678303723c962ebacd91.png

Railsの処理はrouteから開始され、viewによって完了します。この処理の流れをまずは理解していきましょう

全体の流れを説明するための例

全体の処理の流れを説明していく上で、今回はブログの詳細ページを表示しようとしているというイメージで説明を読んでください。

①routeがURLをもとにcontrollerを呼び出す

まず、今回開きたいブログの詳細ページのURLは以下だとします。

https://sample.com/articles/1

routeはこのURLをもとにして、controllerを呼び出します。routeという名前通り、道を指し示す役割だと考えるとわかりやすいと思います。 このrouteに以下のような記述を書いたとします。

  get 'articles/:id', to: 'articles#show'

getからto:までの間がURLを意味します。to:以降はコントローラー名#アクション名を意味しているので、この記述によって、https://sample.com/articles/1というURLはarticlesコントローラーのshowアクションを呼び出します。

②controllerがmodelを操作してデータを取得し、viewを呼び出す

①で呼び出されたarticles_controllerはshowアクションの中で以下のような処理を行います。

class ArticlesController < ApplicationController
    
   def show
       @article = Article.find_by(params[:id])
   end

end

ここでは以下のことをしています。

  1. Articleモデルを操作して、指定されたIDのデータを取得している
  2. views/articles/show.html.erbを呼び出している

実はこの1行で2つのことを行っているのですが、これだけだと理解が難しいので以下で詳しく説明していきます。

modelを操作する

以下の処理で混乱するポイントとしては@articleparams[:id]が何を指しているのかという点だと思います。

@article = Article.find_by(params[:id])

@articleはデータが格納されている箱を用意していると思って下さい。いわゆる変数というものです。ここではまず、取得したデータを格納しているという理解だけで問題ありません。

params[:id]はrouteに書いた記述にarticles/:idというものがあったことを思い出してください。このparamsという中にidという名前のデータが格納されており、このデータの中身としてURLに記述されているhttps://sample.com/articles/1の1の部分が取得することができます。

この2つの処理により、記事ID=1のデータを@articleという変数に格納できた状態になります。

Viewを呼び出す

先述の通り、今回の例ではviews/articles/show.html.erbを呼び出しているのですが、この記述がありません。これはRailsが自動で行っている処理なので、自分で記述をしなくても自動的にviewを呼び出します。自動で呼び出すviewのルールとしては以下のようになります。

views/コントローラー名/アクション名.html.erb

③④Modelがdatabaseに実際にアクセスする

②でcontrollerが @article = Article.find_by(params[:id])という処理を行っていますが、このArticleがモデルとなり、find_byという処理で実際にdatabaseへアクセスを行っています。

⑤ViewがHTMLを構築する

②でviews/articles/show.html.erbというViewファイルが呼び出されているので、このファイルにHTMLを構築する処理を記述していきます。例えば以下のような記述をしてみます。

<div>
  <div class="title-area">
    <%= @article.title  %>
  </div>
  <div class="body-area">
    <%= @article.body  %>
  </div>
</div>

viewはerbという形式(※)で記載してHTMLを構築します。ここで注目すべきは②で取得した@articleという変数を使用できるという点です。 この例ではtitle,bodyという名前のデータをdatabaseに実際に持っている前提があるのですが、お伝えしたいこととしては、@articleという変数を使用することによって、実際のデータを使ってHTMLを構築することができるという点です。

※もしくはhaml,slimという選択肢もありますが、便宜上erbで説明しています

⑥css、javascriptがHTML構築をサポートする

⑤の状態では画面にただ文字が表示されているだけなので、装飾や動きを付けていく必要があります。例えば以下のようにCSSの記述あったとします。

.title-area{
  font-size: 18px;
  color: red;
}

cssに上記のように記述することで⑤で構築されたHTMLをもとにCSSが装飾を行い、HTMLの構築をサポートすることができます。(※ここではtitle-areaというclassを目印にして文字の大きさと文字の色を変更しています)

最後に

全体の理解はできましたでしょうか?一度理解してしまえば、後は各論を詳しくなっていけばあっという間に自分で開発を行っていけるようになると思います!

【SequelPro】macで開発をするエンジニア必須のSequelProの使い方を解説!

https://i.gyazo.com/d392dc722d6cbfe381a9462365d165c6.png

macで開発をする方にとってほぼ必須とも言えるデータベースツールのSequelProの使い方について紹介します。まだインストールしていない方はまずは公式サイトからインストールしてみて下さい。

Sequel Pro

https://i.gyazo.com/acf0d7da59036d5f825c8c19503016a0.png

まずはオーソドックスな使い方の説明をしていきます。

①テーブルエリア

このテーブルエリアで閲覧・編集したいテーブルを選択します。

②メインタブ

構造、内容、関係、トリガ、情報、クエリの6つが存在しています。主に、「構造」「内容」「情報」「クエリ」の4つを使用することが多いです。

構造

カラム、方、長さなどのテーブル構造の情報を確認するために使用します。RailsなどテーブルをSQLで作成しない場合などは、ここでテーブル作成時の定義が意図通りになっているかを確認できるため、非常に便利です。また、indexの付与の状況も確認できます。

内容

テーブルのデータを確認することができます。

情報

テーブルのCREATE構文を確認することができます。CREATE構文を修正して(※例えばテーブルだけを変更して)、クエリタブから実行することで、テーブルを作成することができ、テストを行う時などに役立ちます。

クエリ

SQLを発行することができます。注意点としては、他のタブと異なり、テーブルに対して結びついている機能ではなく、データベース全体へ影響を及ぼす点に注意が必要です。

③表示エリア

タブを切り替えることで表示が変わるエリアです。ここに表示される内容の確認や修正がsequel proを使用する際のオーソドックスな使い方になります