RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

仕事を効率化!おすすめのエクセルショートカット集15選!!

はじめに

皆さんこんにちは,kuwa_38です.今年からラクスに入社した新卒です.社会人になって色々と気づいたことはありますが,その1つが「エクセルって意外と使うな」ということです.テキストファイルやwikiなどに書かれることもありますが,それらと同じかそれ以上にエクセルの資料は多いように感じます.そのため,エクセルを早く扱えて損はないと思っています.
この記事ではエクセルのショートカットや便利機能について記載します.エクセルに向かう時間を短くし,皆さんの貴重な時間を少しでも確保する手助けになれば幸いです.

誰もが使える便利機能

クイックアクセスツールバー:よく使う機能をお気に入り登録する

よく使うツールをお気に入り登録できる機能です.

f:id:kuwa_38:20171022010056p:plain:w300
クイックアクセスツールバー
登録方法:
登録したいツールの上で,右クリック>クイックアクセスツールバーに追加で登録できます.
f:id:kuwa_38:20171101113840p:plain:w300
クイックアクセスツールバーへの登録

小技

  • クイックアクセスツールバーに追加した機能は,マウスを使わずとも,Alt(F10) + 数字(左から順に自動で割り振られます)で使うことができます.自分の登録した機能の数字を覚えておくとより早く作業できます.
    f:id:kuwa_38:20171029190327p:plain:w300
    ショートカットキーでアクセスする方法
  • リボン折りたたむとツールバーが非表示になり,より広く画面を使うことができます.多くの機能を使わない,かつ,画面を広く使いたい方は,使う機能をクイックアクセスツールバーに登録してピン留めをはずすと良いでしょう.
    f:id:kuwa_38:20171029191904p:plain:w300 f:id:kuwa_38:20171029190749p:plain:w300
    リボンを折りたたむ/結果:ツールバーが非表示になる

シートの選択:シートを効率的に探す

図のようにエクセルの左下の箇所(「◁ ▷」の所)で右クリックを押すとシート名の一覧が表示されます.

f:id:kuwa_38:20171022021203p:plain:w300
シートの選択

図形の編集を効率化する

オブジェクトの選択:図形を一気に選択する

複数の図形の移動や編集に便利な機能です.
手順:
1. ホーム>「編集」のグループにある「検索と選択」>「オブジェクトの選択」
2. 選択したい範囲をドラック

f:id:kuwa_38:20171022202843p:plain:w500
オブジェクトの選択メニュー
f:id:kuwa_38:20171022202845p:plain:w300 f:id:kuwa_38:20171022202849p:plain:w300
2.選択範囲をドラック/結果:ドラックした範囲内の図形が全てアクティブになる

図形の編集:途中で図形を変更する

  1. 変更したい図形を選択
  2. 「書式」>「図形の編集」>図形を選択
    f:id:kuwa_38:20171022204100p:plain:w400f:id:kuwa_38:20171022204102p:plain:w200
    図形の変更/結果

表やグラフの作成を効率化する

選択セルの■をダブルクリック:表の一番下までオートフィルを掛ける

手順:
1. オートフィルを掛けたい列の起点となるセルにおいて,■の上にマウスカーソルを置く(「+」が表示されます.)
2. 1の状態でダブルクリック

f:id:kuwa_38:20171022185459p:plain:w300 f:id:kuwa_38:20171022185611p:plain:w300
■をダブルクリックでオートフィル/結果

フィル機能:数千行の数値を作成する

ID1~3000まで作りたいといった時,ドラックしてオートフィルを掛けると時間がかかります.しかし,前項の「表の一番下までオートフィルを掛ける」は他の列が入力済みでないと使えません.そんなときに使える機能です.
手順:
1. 起点となるセルに初期値を入力
2. ホーム>「編集」のグループにある「フィル」>連続データの作成
3. メニューに増分や停止値を設定しOK(図の場合,列(縦)方向に1から3000まで1ずつ値を入力します)

f:id:kuwa_38:20171022193542p:plain
1,2.初期値の入力と連続データの作成
f:id:kuwa_38:20171022193546p:plain f:id:kuwa_38:20171022193548p:plain
3.増分等の設定/結果

右クリックのオートフィル:書式のみコピー

手順:
1. 図のようにオートフィルを掛けたい列の起点となるセルにおいて,■の上にマウスカーソルを置く(「+」が表示されます.)
2. 右クリックを押したまま書式をコピーしたい分だけドラック
3. メニューの「書式のみのコピー(フィル)」を選択(書式がコピーされます.)

f:id:kuwa_38:20171022191520p:plain:w300 f:id:kuwa_38:20171022191524p:plain:w300
1.参考にする書式のセルを選択/2,3.ドッラック,書式のみコピー
f:id:kuwa_38:20171022191526p:plain:w300
結果

「Ctr + *」:表を選択する

Ctr + *で表を選択できます.

f:id:kuwa_38:20171029115459p:plain:w300f:id:kuwa_38:20171029115502p:plain:w300
表を選択する

「F11」:棒グラフのグラフシートを作成する

手順:
1. 表を選択
2. F11

f:id:kuwa_38:20171022200730p:plain f:id:kuwa_38:20171022200755p:plain:w500
表の選択・F11/結果

セル移動と入力を効率化する

「tab」:表の入力を効率化する

tabを押すと1つ右のセルへ移動します.また,Tabを押した後にEnterを押すと,初めにtabを押したセルの1つ下へ移動します.

f:id:kuwa_38:20171029132214p:plain:w300
Tab使用時のセルの移動

「Ctr + 矢印キー」:セル移動を効率化する

表の一番下に移動する時などに重宝するショートカットです.
アクティブセルと移動方向の1つとなりのセルの内容で挙動が変わります.

f:id:kuwa_38:20171029200827p:plain:w500
Ctr + 矢印:移動方向に値が入力済み
f:id:kuwa_38:20171029200849p:plain:w500
Ctr + 矢印:移動方向のセルが空セル

アクティブセル 移動方向の1つとなりのセル 結果
値が入力済み 空セル 値が入力済みのセルまで移動
値が入力済み 値が入力済み 値が入力済みの終端のセルへ移動
空セル 空セル 値が入力済みのセルまで移動
空セル 値が入力済み となりのセルに移動

「F2」:編集と入力を切り替える

アクティブなセルでF2を押すと「編集モード」と「入力モード」を切り替えることができます.
編集モード:
矢印キーを押すと,アクティブなセルの中で文字カーソルが移動します.図のように打ち間違いを修正したい時などに便利です. 例えば,B3セルに「rakkkus」と入力後「←」を押すと,B3セルの中でカーソルが移動します.

f:id:kuwa_38:20171029122740p:plain:w300
編集モード:「←」を押すとセル内で文字カーソルが移動
入力モード:
矢印キーを押すと,他のセルに移動します. 例えば,B3セルに「rakus」と入力後「←」を押すと,A3セルに移動します.
f:id:kuwa_38:20171029122737p:plain:w300
入力モード:「←」を押すと左のセルに移動する

「F4」:参照先の「$」を付ける/はずす

F4を押すことで「=A1」といったセルの参照を「=$A$1」,「=A$1」,「=$A1」,「=A1」と切り替えることができます.
=sum($D$3:$G$8)のようにD3にもG8にも「$」を付けたい場合:
図のように,範囲を入力した後にF4を押すことで「$」の付ける/付けないを変更できます.

f:id:kuwa_38:20171029124016p:plain:w300 f:id:kuwa_38:20171029124019p:plain:w300
全体に「$」を付ける
=sum($D$3:G8)のようにD3のみに「$」を付けたい場合:
前項のF2を利用します.
1. 範囲を入力(「=sum(D3:G8」の状態)
2. F2キーで編集モードに変更
3. D3に文字カーソルを合わせる
4. F4を押す
f:id:kuwa_38:20171029124643p:plain:w300 f:id:kuwa_38:20171029124645p:plain:w300
一部に「$」を付ける

「Ctr + :」:現在時刻を入力する

「Ctr + :」で現在時刻を入力できます.

「Ctr + ;」:現在の日付を入力する

「Ctr + ;」で現在の日付を入力できます.
表示を変更したい場合:
(図は「2017/10/29」 ではなく 「10月29日」 にする場合)
1. 表示型を変更したい範囲を選択
2. 右クリック>セルの書式設定
3. 分類>日付>「種類」を選択

f:id:kuwa_38:20171029130054p:plain:w300 f:id:kuwa_38:20171029130056p:plain:w200 f:id:kuwa_38:20171029130301p:plain:w300
表示の型を変更する

おわりに

この記事ではエクセルの便利機能やショートカットキーについて,私の主観で使いそうなものを15個紹介しました.この記事で紹介したことが,時短や作業の効率化につながれば幸いです.
また,エクセルは本当に様々なことができます. ここで紹介したこと以外にも便利な機能やショートカット(さらに言えば,関数やマクロ)が存在するので,興味を持った方は検索してみてください.

超便利!日本で使えないUberをベトナムで使ってみた!!

初めまして、ラクスエンジニアのnerobluebrosです。

今回は配車サービスの「Uber」について書きます。

ラクスは日本以外にベトナムにもオフィスを構えており、ベトナムのエンジニアチームの育成と課題改善に年に数回ベトナムに出張します。 私も2度行ったのですが、2回目に初めてUber(ウーバー)を使ったところ、とても便利だったので、そのご紹介です!

Uberってなによ?

Uberはタクシーの配車サービスで、スマホのアプリでタクシーを呼び出して利用します。実際にタクシーを利用するまでの手順は以下の通りです。

  1. スマホで行き先を指定してタクシーを呼び出す

  2. よさそうなタクシーがいたら待ち合わせ場所を指定

  3. 行き先と金額を確かめて、確定する

これだけ。

待っているときはどれくらいで到着するかアプリからわかります↓ f:id:neroblubros:20171030183948j:plain

キターーーーー↓ f:id:neroblubros:20171030184016j:plain

支払いは現金かクレジットカード。クレジットカードは情報をあらかじめアプリに登録しておきます。

残念ながら日本では規制とタクシーの二種免許が必要なため、ごく一部の地域を除いてUberは使えません。

次からは実際に使ってよかった点3つ、紹介します!

車が超快適

ベトナムのタクシーも日本のタクシー同様「いかにも!」という業務用の車ですが、Uberでは普通の乗用車がやって来ます。車に関してはハズレ無し。めっちゃ良い。実際、フォードのSUVが来たときもありました!

実際に乗ったフォードのSUVf:id:neroblubros:20171030182558j:plain

ベトナムのタクシーは匂いが嫌だったり、タクシーの床が泥や砂で汚れていたりするので、きれいな車を利用できるのはすごくいい。

クレジットカードの支払いが超便利

前述の通り、Uberは乗る前に支払い方法(現金 or クレジットカード)を選択して利用します。現金の場合は目的地に着いたら支払う。これは万国共通、普通のタクシーと一緒。

クレジットカードで支払う場合は、ここが便利なのですがUberが別処理でやってくれます。なので運転手にクレジットカードを渡す必要すらなし!目的地に着いたら「カム・オン!」(ベトナム語でありがとうの意味)と言って車から降りるだけ!!

ところで、ラクスはクラウドサービスを提供していますが、その中に経費精算のサービス「楽楽精算」があります。実はラクス社内でも楽楽精算を使っているのですが、楽楽精算の便利機能のひとつにクレカデータの連携があります。

なので、会社決済のカードを登録しておいてカードで支払えば精算の手間も省ける!クレジットカードは複数登録できるので、会社の経費で精算ができるときは会社のカード、プライベートは個人のカードで使い分けできます!

閑話休題

Uberでは乗る前にあらかじめ料金が決まるのでボッタクリに遭う心配は皆無ですし、さらにクレジットカードでの支払いにしていればキャッシュレスになるので、超便利です! しかも・・・運賃も通常のタクシーと比較して20%から30%程度安い!これは利用しない手は無いですぜ、ダンナ。

話さなくても良いのが超便利

一般的にベトナム人ベトナム語以外は通じません。それはタクシーの運転手といえども同じ。なので、行き先を伝えるのにひと苦労。ホンマに伝わっているか、行きたいこところに連れて行ってくれるか?ホンマに不安になります。

でも、Uberなら乗る前に行き先を指定しているので、運転手に行き先を伝える必要はありません!しかも、今どこを走っているかが、アプリの画面を見ればわかるので不安になることはありませんでした。

行き先に向かっているときのアプリの画面↓ f:id:neroblubros:20171030183656p:plain

この「話さなくても良い」というのはほんとにストレスを減らしてくれる。っていうかなくしてくれました。

まとめ

良いことばかり言いましたが、悪いところもあります。それはたまにハズレの運転手に当たるということ。 私は前回の出張で合計5回Uberを利用しましたが、最後の5回目でハズレを引いてしまいました。

車の運転が初心者みたいで「慣れていない」というのががんがん伝わってきて「これは事故るな」と。 幸い事故に遭うことはありませんでしたが、このときはさすがに「まじかー」って思いました。

Uberは欧米ではいろいろ防犯上の問題が発生しているみたいですが、ベトナムではそんな印象は受けませんでしたし、実際にどこかに連れていかれそうになるとかはありませんでした。前述の通り、アプリでどこを走っているか、目的地に向かっているかわかるので、一定以上の「安心感」があります。

さていかがでしたでしょうか?Uberの便利なところが伝わりましたでしょうか??日本では使えないUberですが、もし、海外で利用する機会があれば使ってみてください(あ、でも、利用される方は自己責任でお願いしますね)。

おまけ

ラクスでは中途採用を行っています。ベトナムのエンジニアと一緒に自社サービスの開発を行ったり、ベトナムに出張も場合によってはあります。 気になる方は下記をご覧になってください。

ラク中途採用ページ

トップページ | 株式会社ラクス 中途採用

もちろん新卒採用も行っています。

ラクス新卒採用ページ

http://fresh-recruit.rakus.co.jp/

参考

以下記事に出てきた企業のサイトです。

Uber

楽楽精算

ラクスベトナム

プログラミング未経験者向けの学習方法

はじめに

皆さん、こんにちは、今年の4月に入社したプログラミング未経験者のr_yxkxrx13です。
プログラミング超初心者!!という方は、プログラミングの学習を始める前に何を準備して取り組めば分からない…ということが多いと思います。 プログラミング未経験である私が今まで取り組んだプログラミングの学習方法を紹介したいと思います。

プログラミング学習方法

私が今まで取り組んできたプログラミング学習方法は、「コンピュータ基礎/ネットワークの基礎学習サイト」、 「プログラミング学習サイト」、「書籍学習」の3つです。
学習サイトとは、ブラウザ上に無料で気軽に利用できるサイトのことで、インターネットにたくさん出ています。
まずはそのようなサイトを利用して学習を始めるのが良いと思います。 また書籍学習で基礎知識の理解を深めながら、プログラミングの練習をすると良いと思います。 私が利用した学習サイトと書籍について説明します。

コンピュータとネットワークの基礎学習サイト

プログラミング学習の初めに「コンピュータ基礎/ネットワーク」を学習しました。
プログラミングの基礎なので、基礎知識と概念を理解しておくと良いと思います。

  1. 【5分で覚えるIT基礎の基礎】コンピュータの仕組み---目次 | 日経クロステック(xTECH)
    「コンピュータの仕組み」をテーマに基礎知識の全体像と概要を分かりやすく解説されています。

  2. 初心者のためのネットワーク技術 - ネットワークエンジニアを目指して
    「ネットワーク技術」をテーマに基礎知識を分かりやすく解説されています。

プログラミング学習サイト

プログラミングの参考本では、決まった書き方やコードの意味がたくさんあり、全部覚えられない…。
とつまづいてしまうことはあると思います。

私の経験の1つですが、正直に言って、全てを一気に覚えることは無理があります。
逆に理解度が低くなってしまうので意味がありません。

まずプログラミングを書く練習をたくさんすると、自然に覚えられるようになってきます。
また1行ずつコードの意味をコメントアウトしてみると、理解が深まってきます。

そこで、ブラウザ上で実際にプログラミングを作る環境と似た環境で練習できるサイトを紹介します。

  1. Progate

    f:id:r_yxkxrx13:20171024084457p:plain

    (画像出典:Progate

    Progateは、ブラウザ(インターネット)上でプログラミングが学べるサービスです。

    イラストを中心に分かりやすく解説されたスライドで、自分のペースに学習や復習ができます。 また以下のようにブラウザ上でコードを書いて結果を確認することができます。 複雑な環境設定などの準備は不要なので、気軽にプログラミング学習を始めれます!

    初心者レベルから実践レベルまで対応されていて、
    さらにレッスンの種類もたくさんあり、分かりやすく楽しみながら学べるサイトです。

    f:id:r_yxkxrx13:20171023094623p:plain

  2. ドットインストール

    f:id:r_yxkxrx13:20171024085444p:plain

    (画像出典:ドットインストール

    ドットインストールは、約3分間の短いレッスン動画でプログラミングを学べるサイトです。
    動画の音声が聞き取りづらくても動画画面の下に字幕があるので、見返すことができます。 また右側に学習メモの機能があり、新しい知識や疑問をメモすることができます。 動画を見ながら、実際に作ってみることを重点において学習すると良いでしょう。

    f:id:r_yxkxrx13:20171024090834p:plain

  3. CodeResume

    f:id:r_yxkxrx13:20171024095044p:plain
    (画像出典:CodeResume

    CodeResumeは、ブラウザ上でプログラミングが学習できるプラットフォームです。
    練習問題の画面では、以下の図のように解答欄にコードを書き込んで、コンパイルと実行で結果を確認できるようになっています。 またタイマー機能も付いているので、時間を意識して考えて解く力が身についてくると思います。

    f:id:r_yxkxrx13:20171024092332p:plain

書籍学習

学習サイトだけでは学習範囲が限られていますが、書籍での学習も有効な学習方法だと思います。
私が利用した書籍の中からオススメの書籍を紹介します。

  1. スッキリわかるJava入門 第2版 (スッキリシリーズ)

    スッキリわかるJava入門 第2版 (スッキリシリーズ)

    スッキリわかるJava入門 第2版 (スッキリシリーズ)

    本書は、Javaの基本を丁寧にイラストと同時に説明されていますので、非常にわかりやすい内容になっています。 Javaの複雑な開発準備や必要なツールって分からない…。という方、安心して下さい。
    Webブラウザを持つ携帯電話やパソコンで、準備されたクラウド開発実行環境「dokojava」を使って、手軽にプログラミングの練習ができるようになっています。 また「dokojava」の他に、実際に開発現場で使われている「Ecplise」のインストール方法や使い方まで書かれています。 Javaの学習を始める時は、まずこの本を読んでおくことをオススメします!

  2. スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

    スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

    スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

    • 作者:中山 清喬
    • 発売日: 2014/09/22
    • メディア: 単行本(ソフトカバー)

    本書は、Java入門の実践編で開発や設計手法、ツールの知識について、分かりやすく解説されています。
    Javaの応用技術まで紹介されているので、Javaの基本をマスターした方は、さらにステップアップで学びたい時に読むことをオススメします!

  3. Javaルールブック 〜読みやすく効率的なコードの原則

    コードの書き方について大変参考になる本です。
    正しい書き方と間違った書き方の例を挙げて分かりやすく解説されています。
    正しいコードの書き方を身につけると、シンプルで見やすいコードが書けるようになります。

  4. リーダブルコード

    Javaルールブックと同様にコードの書き方について、さらに具体的に丁寧に解説されています。

プログラミング学習の取り組み方

ここまでは学習サイトや書籍を紹介してきましたが、
以下については私が有効だと感じた具体的な学習方法と心構えについて説明します。

  1. 学習内容を読むだけにしない
    学習内容を読んで満足するだけでは理解が深まりません。 学習内容を読んで実際に操作して動作を確認してみる、疑問になったことを納得するまで深く掘り出すことが大切です。

  2. コードを1行1行にコメントをつける
    プログラミングの経験が長い方が書いたコードは、必要な情報だけコメントしています。
    プログラミング未経験の方は、まだコードの意味や書き方に慣れていないので、 まずコードの意味を理解することから始めると良いでしょう。
    慣れてきたら、少しずつコメントを減らして、コードを読める・書けるようにすると良いと思います。

  3. コードが完成したらデバッグをする
    プログラムを実行して結果が正しくても完成とは限らないです。 本当に問題がないかどうか、デバッグをして修正箇所がないか確認をするように心掛けましょう。 処理の流れを把握できるようになってきたら、デバッグ機能に頼らず、自分の目で確認してみましょう。

  4. エラーの原因と対策方法を見つける
    プログラムのバグ(故障・エラー)を見つける力と対策方法の知識を身につけることが大切です。
    例えば、プログラムが完成してバグに気付かないまま、共同者のプログラムを合わせると、 トラブルを起こしてしまう可能性があります。 このようなトラブルが起きた時、どこにバグがあるか、どのように対策をすれば解決できるか、 実際にプログラミングの練習でテストしてみると良いでしょう。
    またプログラムを作成する時は、バグがないプログラムを完成するように心掛けて書くようにしましょう。

  5. サンプルプログラムを鵜呑みにしない
    コードが書けない…という方は、インターネットや書籍にサンプルプログラムを参考にしていますが、 丸ごとコピーして修正するやり方は良くないことです。 サンプルプログラムを書き写して目的に合わせて修正し、動作の理解を深めることが良いでしょう。

  6. プログラミングの練習をできるだけ毎日やる
    スポーツと同じように、プログラミングを書く練習を毎日取り組むと、自然にコードの意味や書き方が分かるようになってきます。 最初は慣れなくて大変ですが、書籍や学習サイトを参考にしながら、書く練習をすると良いでしょう。

  7. プログラミングのツールを試してみる
    プログラミングのツールは、代表的なものだけではなく、あまり知られていないものや最近新しくできたツールを 試しに使ってみて比較することも大切です。 プログラミングの進化が続いているので、新たな知識をたくさん吸収すると良いでしょう。

  8. 簡単なものを開発してみる
    私の場合は、HTML/CSSの学習をしながら、自分のホームページを制作しました。 学習で学んだことを活かして、ホームページやアプリを開発してみると、楽しくやりがいがあると実感できます。

  9. プログラマーと情報交換をする
    プログラミング経験者は、技術情報やプログラミングの学習などたくさんの情報を持っています。 疑問や悩みまで相談できるので、プログラマーの仲間を作ることも大切です。

終わりに

プログラミング未経験者向けの学習方法と取り組み方を紹介しました。

紹介した学習方法の他にもたくさんありますので、
自分に合った方法を見つけて、是非プログラミングの学習を始めてみてください!

今だからこそ!マルチブラウザJavaScript再考

はじめに

皆さん初めまして、新卒一年目のFM_Harmonyと申します。

今回はマルチブラウザという観点から、最近のJavaScriptについて調べました。jQueryの登場や、主要なブラウザが標準仕様への準拠を進めたことで、エンジニアがJavaScriptの動作環境を気にすることが、以前に比べ減りました。しかし調べていくと、今後はトランスパイルAltJSによる対応が、JavaScriptにおいて必要になっていくのだということが分かりました。

このまとめが、最近Webアプリケーション開発に関わりはじめた方や、今後のJavaScriptについて興味のある方にとって、少しでも参考になれば幸いです。

目次

  • はじめに
  • 目次
  • 本題の前に
  • これまでのマルチブラウザ対策
    • JavaScriptとブラウザ
    • マルチブラウザ対策としてのjQuery
    • 各ブラウザの対応
  • これからのマルチブラウザ対策
    • ES6とIE11
    • トランスパイル
    • AltJS
  • まとめ
  • 注釈
続きを読む

セッション管理としてRedisを使用する

はじめに

みなさん こんにちは、Thuatと申します。今年ラクスに入社しました1年目です。 この記事ではセッション管理としてRedisを使用するケースを紹介します。

Redisとは?

Redis は簡単に言うと、メモリ上のKey-Valueストアです。 メモリ上にデータを格納しますので高速に動作します。
以下はインストールから簡単なデータの登録・取得までの手順になります。

Redisをインストールする

$ wget http://download.redis.io/releases/redis-4.0.1.tar.gz
$ tar xzf redis-4.0.1.tar.gz
$ cd redis-4.0.1
$ make

Redisサーバーを起動する

$ src/redis-server
33507:C 25 Sep 23:21:32.201 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
33507:C 25 Sep 23:21:32.202 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=33507, just started
33507:C 25 Sep 23:21:32.202 # Warning: no config file specified, using the default config. In order to specify a config file use src/redis-server /path/to/redis.conf
33507:M 25 Sep 23:21:32.203 * Increased maximum number of open files to 10032 (it was originally set to 256).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.1 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 33507
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

33507:M 25 Sep 23:21:32.206 # Server initialized
33507:M 25 Sep 23:21:32.206 * DB loaded from disk: 0.000 seconds
33507:M 25 Sep 23:21:32.206 * Ready to accept connections

Redisのポートはデフォルトで6379になります。

クライアントからGET/SETする

Redisにあらかじめ組込まれているクライアントツールからデータをGET/SETしてみましょう。
シンタックスは以下になります。
set key value
get key

$ src/redis-cli
127.0.0.1:6379> set key1 10000
OK
127.0.0.1:6379> get key1
"10000"
127.0.0.1:6379> 

ValueJSONでも保存できます。

127.0.0.1:6379> set user_info '{"username":"taro", "age":20}'
OK
127.0.0.1:6379> get user_info
"{\"username\":\"taro\", \"age\":20}"
127.0.0.1:6379>

Redisは メモリ上にデータを格納しますので、デフォルトはサーバーを停止、再起動した場合は、データが失われます。 Redisはどのような時に利用すればよいでしょうか。 最適なユースケースはキャッシュやセッション管理です。

セッション管理としてRedisを使用する

セッションとは?

セッションはクライアントとサーバの通信の状態をWebサーバー上に保持されます。クライアントはセッションIDをURLやクッキー経由でサーバに渡します。 Key-Value構造としてメモリ、ファイル又はDBに格納します。KeyはセッションID、Valueはセッションに保存したいデータです。
デフォルトではセッションは Webサーバーのメモリ上に保持されます。 Webサーバー単独でセッション管理を行う場合はWebサーバーのロードバランサを構成できません。 セッションをDBに格納する設定にすると、ロードバランサを構成することができますが、パフォーマンスに影響します。
セッションについては、
https://blog.takanabe.tokyo/2014/12/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86%E3%81%AE%E5%91%A8%E8%BE%BA%E7%9F%A5%E8%AD%98%E3%81%BE%E3%81%A8%E3%82%81/
を参照ください。

Redisを使ってセッションを管理する

データをセッションではなくて Redisで管理する方法を紹介します。
Redisにはセッションのようにタイムアウト時間を設定できます。タイムアウト時間を超えた場合はRedisに保存したデータが自動的に削除されます。

以下の機能をJavaで実現してみます。

JavaでのRedisクライアントは多くありますが一番人気はJedisです。
https://github.com/xetorthio/jedis/wiki/Getting-started

プロジェクトのLibrariesにjedis-2.9.0.jarを追加してください。
http://search.maven.org/remotecontent?filepath=redis/clients/jedis/2.9.0/jedis-2.9.0.jar

jedis-2.9.0.jar を追加する


フォルダの構成は以下のようになります

Userクラスを作成します。

package jp.co.jedis;

public class User {
    private String username;
    private String address;

    public User(String username, String address) {
        this.username = username;
        this.address  = address;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "{'username':'"+this.username + "' , 'address':'"+ this.address + "'}";
    }

}


UserActionクラスを作成します。 ユーザーのデータをRedisに保存するためのクラスです。
3分後、自動にExpireされるように設定します。
KeyはユニークなUUID、ValueJSONでのユーザーのデータです。

package jp.co.jedis;

import java.util.UUID;

import redis.clients.jedis.Jedis;

public class UserAction {
    private static final int TIMEOUT = 3*60; //3分
    public static void main(String[] args) {
        String userToken = UUID.randomUUID().toString();
        System.out.println("user token: " + userToken);
        Jedis jedis = new Jedis("localhost");
        User user = new  User("tanaka", "Tokyo-shibuya");
        //3分後、無効になる
        jedis.setex(userToken, TIMEOUT, user.toString());
        jedis.close();

    }

}


Eclipseで実行してみましょう。


Redisのクライアントで確認しましょう。

127.0.0.1:6379> get a62a05d0-1efe-4d09-99f1-4289ff1511a6   -> 3分以内の場合
"{'username':'tanaka' , 'address':'Tokyo-shibuya'}"

127.0.0.1:6379> get a62a05d0-1efe-4d09-99f1-4289ff1511a6  -> 3分以上の場合
(nil)
127.0.0.1:6379> 

a62a05d0-1efe-4d09-99f1-4289ff1511a6 は生成されたKey、ユニークなUUIDです。

セッション管理としてRedisを使用するメリットは以下になります。

  • メモリ上に格納するのでパフォーマンスがよい

  • Webサーバーの負荷が減る

  • 別サーバーでセッション管理するので、Webサーバーのロードバランサを問題なく構成することができる
    ロードバランサを構成するには以下のような構成となります。

最後に

セッション管理としてRedisを使用する方法やJavaでRedisにアクセスする方法を紹介しました。 Redisはまだたくさんオプションがあります。
例えば接続数ハンドル、トランザクションクラスターなどをもっと知りたい方は https://github.com/xetorthio/jedis/wiki を参照ください。

参考資料

https://blog.takanabe.tokyo/2014/12/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86%E3%81%AE%E5%91%A8%E8%BE%BA%E7%9F%A5%E8%AD%98%E3%81%BE%E3%81%A8%E3%82%81/

Redis

Home · redis/jedis Wiki · GitHub


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

今更聞けない『クラウド』の仕組み

はじめに

皆さんこんにちは、rs_tukkiです。今年新卒でラクスに入社しましたピッカピカの一年生です。

普段仕事や授業に取り組んでいると、「あれ、この単語どういう意味だろう?」と思っても、さも知ってて当然かのように話が進むせいでなかなか聞けなかったりすることありますよね。大丈夫です。私も割と多いです。
そんな「今更聞けない」言葉ですが、皆さん、こんな単語をご存知でしょうか。

クラウド

…はい、おそらく、知らない方はいないはずです。ですが、
クラウドサービスとか、最近よく聞くけどどんなサービスなの?」
「なんかデータを預けるとか聞いたことがあるけど、いざ質問されるとわからないな」

という方も多いでしょう。

そこで今回は、ラクスのシステムの根幹を担う「クラウド」が、どんなサービスなのかということについて、一から解説していこうと思います。

目次


クラウドとは?

概要

さて、クラウドについてネットで調べてみると、たまにこういう記述が見つかります。
クラウドの定義はとても曖昧です」
「定義や意味は曖昧である」

…さすがにこれでは元も子もないですね。
ですが、なんとか一言で「クラウド」を説明するのであれば、おそらく
「ユーザ一人ひとりがソフトやサーバを用意しなくても、ネットワークを通じてそれらを使うことが出来る、という考え方」
とするのが正しいと思います。

私たちが今までサービスを利用するには、専用のソフトウェアをインストールしたり、サーバを一から作る必要がありました。それが、クラウドによって「どこにあるか分からないけど、ネットワークの中から、必要な時に必要な量を取り出して利用する」ようになったのです。

クラウドという名称ですが、どこにあるかは分からない、けどどこかにある、というイメージが雲(=cloud)の中を手探りで操作しているように見えた、とか、ソフトやサーバを一極集中させていることから、ユーザがそこに群がっている(=crowd)ように見えた、など単語の意味自体には諸説あるようです。

クラウドという名前が生まれた背景

クラウド」という言葉を最初に使用し始めたのは、当時の米GoogleSEOエリック・シュミット氏だと言われています。これは2006年8月のことですが、実は有名なクラウドサービスの一つであるGmailは、2004年には既に稼働が始まっていました。 つまりクラウドという言葉は、技術の登場と同時に誕生したのではなく「元々存在していた技術に名前を付けたもの」ということになります。

なぜ、わざわざ名前を付けるようなことをしたのでしょうか。

それは、当時多くのサービスが「クラウドではなかった」からなのです。例えば、ワードやエクセル、パワーポイントなどのアプリケーション。これらは、当然自分のパソコンの中にインストールしなければ使えませんし、作成したデータも(USBなどの外部領域を使わないのであれば)一般的には、そのパソコンの中に保存しています。

このような非クラウドなサービスでも問題はないのですが、Gmailなどの誕生を機に「この形式でサービスを作れば、より便利になるんじゃないか」という流れが生まれました。そのため、「ユーザがそれぞれの領域にソフトやデータを確保する」という今までの使い方に対して、これからは「ネットワークにソフトやデータを配置して、場所は分からないけど簡単に使えるようにしよう」、ということを簡単に表す言葉として、「クラウド」が使われ始めたのです。


クラウドの使用例

さて、実際のクラウドの使用例についてですが、先ほど挙げたGmailなどのメールサービスをもとに説明します。
私たちがメールを送る際は、パソコン上でメールを作成や送受信を行うための「メールソフト」と、実際に送受信を制御するための「メールサーバ」が必要です。
メールソフトはOutlookBecky!Thunderbirdなどのソフトをインストールすればいいのですが、メールサーバの構築をクラウドなしで実現しようとすると結構大変です。企業であれば社内のメールサーバを持っているところもあるものの、個人で構築するのは手間ですし、あまり意味はありません。

一方、GmailHotmailなどの、クラウドサービスとして提供されているメールサービスでは、私たちユーザが用意するものは「インターネットに接続できるブラウザ」だけで十分です。ソフトのインストールも、サーバの構築も必要なく、
「どこにあるかはわからないけど、どこかにあるソフトとサーバを使わせてもらう」
ことで、メールの送受信を実現しているのです。


クラウド使用によるメリット・デメリット

ただ、クラウドサービスは便利なだけではなく、当然デメリットも存在します。個人向け、企業向けのクラウドサービスごとに、主な例を挙げて説明します。

個人向けクラウドサービスのメリット
  1. どこからでも、どんな端末からでもアクセスできる
    企業、個人問わず、クラウドサービスにおいて最もメリットを体感できるのはこれだと思います。わざわざSDカードやUSBメモリを使ってデータを移し替えなくても、データはインターネット上のサーバに保存されていますから、他のデバイスでもログインするだけでデータの共有が可能になります。買い物に行くとき、自宅のパソコンで欲しい商品を調べてメモしておいて、それをスマートフォンで確認する、といったことが可能になります。

  2. 更新作業が不要
    パソコンでもスマートフォンでも、インストールして使用するタイプのソフトは、定期的なアップデートが必要でした。ですが、クラウドサービスはソフトの更新をサーバ側で行ってくれるため、煩雑な更新作業や、それに伴うシステムの不具合に悩まされる必要もなくなるのです。

個人向けクラウドサービスのデメリット
  1. データ漏洩・紛失の可能性
    クラウドはインターネット上にデータを保管するわけなので当然と言えば当然なのですが、ログイン情報の流出や、その他サーバ側の不手際によって、簡単に個人情報が流出してしまう可能性があるわけです。前者はともかく、後者は使用者にとってはどうしようもないので、信頼のおけるサービスを使うようにしましょう。
    また、サーバ障害、サービス自体の廃止など、クラウド上に保存しておいたデータがいつのまにかなくなっていることも考えられます。大切なデータは、自分の手元にバックアップを取るようにした方が無難です。
企業向けクラウドサービスのメリット
  1. どこからでも、どんな端末からでもアクセスできる
    先ほど個人向けでも説明した内容と同じです。ネット環境さえあれば、たとえ出張先でも使えます。

  2. コスト削減
    ここでいう「コスト」とは、「初期コスト」と「保守・管理コスト」の2種類に分けられます。クラウドを用いず、自社でサーバやシステムを用意しようとすると、どうしても最初の環境整備や、稼働開始後の保守・管理に費用や人員を割かなければいけません。しかし、クラウドサービスにおいては、特に小規模のシステムで初期費用が抜群に軽減されるほか、煩雑なアップデート作業も管理会社が請け負ってくれるため、そのためのコストも削減が見込めるのです。

企業向けクラウドサービスのデメリット
  1. データ漏洩の可能性
    個人向けでも説明した内容ですが、企業向けのクラウドサービスでは扱うデータの性質上、よりハッキングの攻撃対象になりやすいというリスクがあります。当然企業向けの有料サービスであれば管理会社が何らかの対策はしてあるでしょうが、その面もきちんと確認しておくのが堅実かと思います。


クラウドサービスの分類

ここまで説明してきたクラウドサービスの提供形態ですが、実は更に細かく分類することができます。

SaaS(Software as a Service)

SaaSは、クラウドによってソフトウェアを提供するサービスのことです。先ほど例として挙げたGmailや、Google Driveなどのサービスは代表的なSaaSと言えるでしょう。
その他、個人向けではDropBox、企業向けではSalesforceなど、普段から皆さんがよく使っている「クラウドサービス」は、ほとんどがこのSaaSだと思います。

PaaS(Platform as a Service)

PaaSとは、クラウドによって開発環境を提供するサービスのことです。有名なところだとGoogle App EngineMicrosoft Azureなどがあります。
SaaSとは違い、PaaSとIaaSはエンジニア以外が使うことはあまりないと思います。利用者は提供された開発環境の上でウェブサービスを開発し、更に提供しているのです。

IaaS(Infrastructure as a Service)

IaaSとは、クラウドによってサーバを提供するサービスのことです。各種レンタルサーバなどはIaaSに含まれます。
PaaSより更に範囲が狭まって、サーバのみの提供となっていますが、開発環境から自分で用意できるため、自分の好きなプラットフォームで開発したい、という人はこちらを使うことになります。


おわりに

最近よく聞くけど、改めて考えてみるとイメージのつかめない「クラウド」という言葉について解説しました。
私自身大学でクラウドシステムを用いたゲームを開発していたことがあるのですが、意外と知らないことが多く苦戦しました改めて勉強し直すいい機会になったと思います。
今回の記事で、少しでも皆さんの「?」が解消出来たら幸いです!


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Git初心者のためのローカル作業時の備忘録

はじめに

皆さんはじめまして。新人エンジニアのsts-250rrです。
本年度新卒として入社し、1年目の私ですがよろしくお願いいたします。

Git初心者である方の中には、Gitの大枠がどんなものかは知っているし、使ったこともある。
でも機械的git status,git add -Aとしていたり、git commitをしていた。
というような方もおられるのではないでしょうか?(私はその口でした・・・)

各コマンドの正しい知識を持たずに機械的にコマンドを実行するのでは、 業務を行う上で正しい操作ができないことも考えられます。チームの開発ではなおさら御法度といえるでしょう。
私自身含め、そのような方が今後Gitで失敗をしてしまわないように手助けができればと思います。

本記事では、ローカル環境で作業をする際のGitの構成であるリポジトリやワークツリー・インデックスに関してまとめ、利用するコマンドがどのような操作であるのかを再確認していきます。 それらを把握したうえで、よく利用するGitコマンドをシーン別に分けて紹介し、コマンドによる操作のイメージを持っていただきたいと思います。
加えて、コミットの流れやコミットで失敗してしまったときの対処法も載せておきましたので、困ったときの参考になると幸いです。

リポジトリ・ワークツリー・インデックスって?

Gitではローカルで作業する際に以下のような構成でプロジェクトを管理しています。 この部分の構成を理解していると、addやcommitによってどのような操作がなされるのかがわかってくるかと思います。

  • リモートリポジトリ[Remote repository]
    サーバに配置されており、複数人でプロジェクトを共有する場所。
    *本記事での話題の対象ではありません。

  • ローカルリポジトリ[local repository]
    ローカル環境内でのプロジェクトのファイルやディレクトリの変更履歴を記録する場所。

    • ヘッド[HEAD]:最新のコミット状態を示す。
  • インデックス[index]
    ローカルリポジトリにコミットを行う準備をする場所。ワークツリーから登録された内容をgit commitでコミットする。
    インデックスが存在することで、ワークツリー内の必要のないファイルはコミットしないといったことができる。

  • ワークツリー[work tree]
    実際に作業を行っているディレクトリであり、編集を行った最新のファイルが存在する。
    ここでの作業内容をgit addすることでインデックスに変更を登録する。

これらローカル内の3つの構成により、Gitではプロジェクトの管理が行われています。 この部分が理解できればaddcommit、それらの操作を取り消すresetといった操作が理解しやすくなったのではないでしょうか。

シーン別:よく使うGitコマンド

前節まででローカル環境でのGitの構成の大枠は掴んでいただけたでしょうか?
本節では、多様なgitコマンドの中からよく使うコマンドを3つのシーンに分けてまとめています。
逆引きのように利用していただけると幸いです。

編集を確認したいとき
  • log
    • git log :最新までのコミットログを確認。
    • git log --oneline :コミットログを簡潔に確認。
  • status
    • git status:ローカルで編集されたファイルの一覧を表示。
  • diff
    • git diff:インデックスとワークツリーの全ての差分を表示。
    • git diff ファイル名:インデックスとワークツリーのしてファイルの差分を表示。
編集したものをリポジトリにコミットしたいとき
  • add
    • git add -A:ワークツリーの内容をすべてインデックスに登録。
    • git add <ファイル名>:編集した1ファイルのみをインデックスに登録。
    • git add <ファイル名1> <ファイル名2>:複数の編集をインデックスに登録。
  • commit
    • git commit:インデックスの内容を全てコミットする。
    • git commit -m 'message':コミットと同時に1行メッセージを書く。
addやコミットを取り消したいとき
  • reset
    • git reset:git addの内容を取り消す。
    • git reset --soft HEAD^:直前のコミットのみを取り消す。
    • git reset --hard HEAD^:現時点のインデックスやワークツリーごと直前のコミットを取り消す。

コミットするときの流れ

本節では実際コミットをするまでの流れを以下のTest.javaファイルと共に確認していきます。

public class Test {
    public static void main(String[] args) {

    }
}

Test.javaにある編集を加えました。編集は正しく反映されているでしょうか?
自身の編集が完了したらgit statusで現在の状態を確認します。

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   src/test/Test.java

no changes added to commit (use "git add" and/or "git commit -a")

Test.javaに変更があったようです。ソース内ではどのような変更があったのかgit diffで確認します。

$ git diff
diff --git a/src/test/Test.java b/src/test/Test.java
index 8e11c08..b625295 100644
--- a/src/test/Test.java
+++ b/src/test/Test.java
@@ -2,5 +2,6 @@ package test;

 public class Test {
        public static void main(String[] args) {
+               System.out.println("Test");^M
        }
 }

出力部分が追加されたようですね。ではこの編集をインデックスに登録しましょう。
確実にインデックスに追加したい自身の編集ファイルのみ git add src/test/Test.java で登録しましょう。

再度、現在の状態を確認します。

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   src/test/Test.java

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

インデックスに登録されている様子が確認できました。 それではコミットしていきましょう。

$ git commit -m 'Test出力の追加'
[master 2eb4313] Test出力の追加
 1 file changed, 1 insertion(+)

問題なくコミットできたようです。
最後にコミットの履歴のログを確認しておきましょう。

$ git log --oneline
2eb4313 (HEAD -> master) Test出力の追加
8823cc3 Test.javaの作成
97fde21 first commit

ここまでの作業が完了すればローカルでの編集内容が履歴として記録されることになります。
以降は同様に編集→コミットしていけばよいわけですね。
個人的にコミットまでの注意点は

  • git diffで変更差分を確認すること。
  • git addで必要のないファイルまでインデックスに登録しないこと

この2点だと思っています。
この点を意識できているかどうかだけでも、Gitに対する理解が深まるのではないでしょうか。

コミットで失敗したとき

次に、今までやってきた「addやcommitをやり直したい」そんなときの流れを簡単に確認します。
例として、前節で行ったコミットが間違えていたのでなかったことにしましょう。
git resetのオプションを指定して直前のコミットをなかったことにします。

$ git reset --soft HEAD^

ログやステータスを確認してコミットが取り消されていることと現在の状態を確認します。

$ git log --oneline
8823cc3 (HEAD -> master) Test.javaの作成
97fde21 first commit

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   src/test/Test.java

直前のコミットTest出力の追加が取り消されています。 ここまでで、直前のコミットを取り消し、編集内容がインデックスに登録されているという状態が確認できました。 次にこのadd自体も取り消してみましょう。
この場合はオプション無しのgit resetです。

$ git reset
Unstaged changes after reset:
M       src/test/Test.java

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   src/test/Test.java

no changes added to commit (use "git add" and/or "git commit -a")

addされた内容がインデックスの登録から外れた様子も確認できました。
ここまでで直前のコミットを取り消し、編集内容も取り消しました。つまり、2つ前のコミットの状態まで戻ったことになります。ここからは引き続き作業を行っていきましょう。

おわりに

最初にも述べたように機械的に行うcommitaddはGitを利用していく上で良いことではありません。
自身が利用するツールに関してはどのような利用方法があるのか、どのような操作であるのかを確認して利用していくと良いかと思います。

自身の学習を踏まえた記事ではありますが、読んで頂いた方々の参考になれば幸いです。


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.