ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

仕事は楽しいかね?②を読んで考える、最高の上司と部下

はじめに

仕事は楽しいかね?kindle unlimitedで読めるよ!

仕事は楽しいかね?

仕事は楽しいかね?

仕事は楽しいかね? 2

仕事は楽しいかね? 2

take-she12.hatenablog.com

2冊目の本作は変化を味方につけ、事業を成功させて昇進した主人公が、良い上司、良い部下とは何かを学ぶ会です。

本の内容自体は読んでいただくとして、この本を読んで自分の身の回りの上司・部下の理想について考えていきます。

良い上司とは?管理職の仕事とは?

管理職といえば、部下の仕事や、部下自身を管理する仕事のように聞こえます。マネージャーとプレイヤーの関係ですね。

実はみなさんも少しずつ気づいているかもしれませんが、ここには上下関係はなく、役割が違うだけなんですね。

リーダーやマネージャとプレイヤーに一方向の上下関係があると、おそらく仕事はうまくいきません。上司は部下を管理したいから逐一状況を知りたがるし、報告させるだろうし、部下は報告資料を作るために時間がかかってしまい、本当にしたい仕事はできません。

極限まで理想的な状態は、上司は部下を信頼し好きにやってもらうし、部下は上司を信頼し、好きにやって結果を出すことではないでしょうか。

つまり、管理職は管理をしてはいけない。

僕自身、管理職は管理をせず、見守ることが仕事だと思っています。(もしくは経営層と戦ってくれること、かもしれません。)僕は入社間もないことと、管理職と密接に仕事をした経験がないので、管理職が本当にどんな仕事をしているかは知らないので、想像です。

ビジネス責任者かもしれない。でも実際に仕事を進めるのは部下たち。それが自主的に高まりあって良い結果を出すチームであればなおのこということがないわけです。

良い上司は、管理せず、見守りつつ、時々軌道修正の助言をしたり、チームがよりよい生産性を出せるような仕組みを提案するひとだと、僕は思います。

良い部下とは

先ほどもいいましたが、良い部下とは上司が「こいつに任せとけば大丈夫」と思われるひとだと思います。

そのためには常に変化に挑み、やったことと効果を常に分析し、最良を目指し続ける姿勢が大切です。加えて、チームメンバーへ働きかけ、問題の早期解決のために補助ができるとなおよいです。

なんだか理想ばかり語ってしまったかもしれません。

今の自分の上司はまさに「見守る」タイプの上司だと思っています。おそらくかなりいろんなことを考えてる方だとは思うのですが、今のところ、ところどころコメントはしていただきつつも、基本は見守ってくれています。

僕は普段からより積極的にチームを引っ張る役目をもって、こいつに任せとけばなんとかなると、今後思ってもらえるような仕事をするだけです。

おわりに

管理職は管理をしてはいけない。わかっていてもなかなか難しいことだと思います。

そういう意味で今の職場、上司はもしかしたら最高の上司なのかもしれません。自分が最高の上司、最高の部下になるべく、仕事の仕方には常に気を使って、上司にとって良い部下に、部下にとって良い上司になっていきたい。

レガシーな静的Webサイトを一新!その③ CircleCIとGithub連携でDevOps!

はじめに

レガシーなサイトをcssフレームワークをいれてリニューアルし、独自ドメインをとってAWS S3にWebホスティングするところまで前回実施しました。

take-she12.hatenablog.com

take-she12.hatenablog.com

今回はCircleCIとGithub連携編です。これによってgitへのpushと連動してS3(本番環境)の更新を自動的に起こします。

CircleCI

社内のような閉じた環境だとJenkinsを使っていますが、CircleCIも気になってたのでいいチャンスです。使ってみます。

circleci.com

github連携でサインアップできますね!

f:id:take_she12:20161205223527p:plain:w500

githubリポジトリから選択。

f:id:take_she12:20161205223542p:plain:w500

buildに失敗したようです。何も設定してないしな。

f:id:take_she12:20161205223546p:plain:w500

IAMユーザの作成

deployするためのユーザを作成します。AWSのサービスからIAMを選びます。

f:id:take_she12:20161206011932p:plain:w500

s3-deploy-userというユーザで、S3へのアクセスを許可するポリシーを選びます。

f:id:take_she12:20161206011949p:plain:w500

ユーザを作成します。

f:id:take_she12:20161206011953p:plain:w500

この画面で見えるアクセスキーとシークレットアクセスキーは必ずコピペで保存しておいてください。長いです。

CircleCIでAWSアカウントと連携

プロジェクトからAWSのアカウント連携で、先ほど表示されたアクセスキーとシークレットアクセスキーを入力します。

f:id:take_she12:20161206012011p:plain:w500

プロジェクトのtopにcircle.ymlを以下の内容で設置します。

machine:
  timezone:
    Asia/Tokyo

dependencies:
    override:
        - sudo pip install awscli
    post:
        - aws configure set region ap-northeast-1

test:
  override:
    - echo "Nothing to do here"

deployment:
  production:
    branch: master
    commands:
      - aws s3 sync . s3://toketenakunaru.com/ --delete

toketenakunaru/circle.yml at master · takeshe12/toketenakunaru · GitHub

build成功しました。(何度か失敗してるのはご愛嬌。)

f:id:take_she12:20161206012024p:plain:w500

おわりに

これにてgitのmasterにpush時に自動的にCircleCIがまわって本番環境(S3)にdeployされるようになりました。とっても楽ですね。もっとちゃんとするならstaging環境を作ってそこでテストして、okならマージとしてもよいかもしれませんね。

しばらくは自分のHPをおもちゃにいろいろ遊んでいきます!無事やりたいことができてよかった。

以下の記事が大変参考になりました。

qiita.com

レガシーな静的Webサイトを一新!その② 独自ドメインを使ってAWS S3に静的Webサイト公開

はじめに

前回はHPをリニューアルするということでgithubに登録して軽量フレームワークskeltonをいれて移植作業をしました。

take-she12.hatenablog.com

今回はいよいよ本番環境へデプロイです。

今まではfc2を使っていましたが、独自ドメインをとって移転します。

toketenakunaru.web.fc2.com

公式ドキュメント

しっかりありますね。

docs.aws.amazon.com

バケット作成

はるか昔にアカウントは作っていてとっくに試用枠は切れています。S3のページに行って、バケットの作成です。

f:id:take_she12:20161204172645p:plain:w500

リージョンを選ばされるんですがどこが1番安いんですかねぇ。

f:id:take_she12:20161204172820p:plain

マニュアルが充実していて助かる。レイテンシがコストに関係するといっているのでtokyoを選んでみましょう。

docs.aws.amazon.com

ログファイル生成するか選べるらしい。当然欲しいけど、追加でお金がかかるということで、必要になったらいれるようにします。今回はなしで。

ホスティング設定を有効にする

f:id:take_she12:20161204173755p:plain:w500

ファイルアップロード

まずはindex.htmlだけ。

f:id:take_she12:20161204173809p:plain:w500

公開

よくわからないまま、index.htmlを公開する、を選んで、プロパティをみるとエンドポイントが。アクセスしたら見れました。あっけなさすぎるよ。。。

とけてなくなる

とりあえず他のファイルも全部アップロードしてしまいます。

公開する、でアクセス許可がされるような感じでしょうかね。他のファイルも公開したら見事に見れました。あっけない。。。

独自ドメインの取得

なんだかんだではじめてです。toketenakunaru.*というドメインを取得します。

amazonアカウントでログインできたのでGMPペパボのムームードメインで取得しました。なおネームサーバは「今は使用しない」で。

ドメイン取得は 【ムームードメイン】最安値99円!

ぱんぱかかーん感

f:id:take_she12:20161204181246p:plain

年間600円って安すぎですね。

Route 53

かっこいいよな名前。名前重要。

取得したドメイン名をDNSに登録できる。

バケットはtoketenakunaru.com(取得ドメインと一致)じゃないとダメです。作り直しました。Route52登録時には選択肢から選べます。

f:id:take_she12:20161204184213p:plain:w500

ここであらためてムームードメインの管理画面でRoute53登録時に表示されているネームサーバを登録します。

f:id:take_she12:20161204185453p:plain:w500

1分そこらでアクセスできました。すごない?

f:id:take_she12:20161204185715p:plain:w500

おわりに

Route 53とDNSに動きは復習かねて整理したほうがいいと思いますが、静的webサイトをS3を使って公開するのはとても簡単でした。Amazonすごいよ。。。

次回はCircleCIを使って、githubのmasterへのpushをトリガーに本番環境が更新される仕組みを作っていきます!

レガシーな静的webサイトを一新!軽量cssフレームワークSkelton導入

はじめに

前々からリニューアルしようとしているけどどうも腰が重い。

take-she12.hatenablog.com

今時の方法ってどうやってんだろ?さくらVPN借りてweb立ててドメインとって公開するのが一番スタンダードなやり方なのはわかってるけど、もっとイケてるやり方ないのかな、と探したらありました。

qiita.com

ドンピシャでやりたいことあるやんけ。今仕事ではWebではなくインフラ含めですが、CI/CDをやっています。社内ではJenkinsを使ってるけどCircleCIも使ってみたかったのでちょうどいい。

最終目標はこれとして、今回はhtmlの移植をやっていきます!

Githubにコードを登録

プロジェクトを作成し、git clone

take@MacBook-Air ~/toketenakunaru> 
git clone https://github.com/takeshe12/toketenakunaru.git
Cloning into 'toketenakunaru'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
Checking connectivity... done.

まずは今のレガシーなコードを全部ぶちこみます。

github.com

途中までやりかかってたらしきファイルが見つかったのでそれをいれました。多分css抜きでコンテンツだけ書いたレベルのものだと思われます。

開発環境

開発環境なんてたいそうなものではないですが。。。とはいえhttpdとgitさえあればいいので、わざわざvagrantで環境作るまでもないかなと思いました。てか最初からhttpd入っていた。適当なディレクトリを作業フォルダとします。

take@MacBook-Air ~> mkdir toketenakunaru
take@MacBook-Air ~> cd toketenakunaru/
take@MacBook-Air ~/toketenakunaru> httpd -v
Server version: Apache/2.4.18 (Unix)
Server built:   Feb 20 2016 20:03:19
take@MacBook-Air ~/toketenakunaru> git --version
git version 2.7.4 (Apple Git-66)

なんかもう既に動いてるっぽい。

take@MacBook-Air ~/toketenakunaru> sudo apachectl start
Password:
/System/Library/LaunchDaemons/org.apache.httpd.plist: service already loaded
take@MacBook-Air ~/toketenakunaru> sudo apachectl status
Go to http://localhost:80/server-status in the web browser of your choice.
Note that mod_status must be enabled for this to work.

とりあえず、httpdの設定を変えるというよりは、gitでpullした場所にシンボリックリンクを貼ってうまいことやりたい。が、軽く検索したところいろいろハマりそうなので、設定ファイルのドキュメントルートを変えることにした。

diff /etc/apache2/httpd.conf.161203 /etc/apache2/httpd.conf
236,237c236,239
< DocumentRoot "/Library/WebServer/Documents"
< <Directory "/Library/WebServer/Documents">
---
> #DocumentRoot "/Library/WebServer/Documents"
> #<Directory "/Library/WebServer/Documents">
> DocumentRoot "/Users/take/toketenakunaru"
> <Directory "/Users/take/toketenakunaru">

ちゃんと変わりましたね。

take@MacBook-Air ~/toketenakunaru> curl localhost
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>とけてなくなる</title>
  <meta name="Keywords" content="バンド、作詞、作曲">
  <meta name="Description" content="とけてなくなるというバンドのHPです。">

  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
  <script type="text/javascript">
  $(function(){
    $("#header").load("header.html");
    $("#footer").load("footer.html");
    $("#menu").load("menu.html");
  })
  </script>
</head>

<body>
  <nav id="header"></nav>
  <div id="menu"></div>

<div id="contents">
  <h2 class="info">Information</h2>
  <section class="sec">
    <h3>5th Album 発売決定!</h3>
    <p>初のバンド録音だよ!</p>
  </section>
  <section class="sec">
    <h3>HPリニューアル</h3>
    <p>HPリニューアルしたよ!</p>
  </section>
</div>

<div id="footer"></div>

</body>
</html>

cssフレームワーク

S3だドメインだっていう前にローカル環境でそれなりのものを作らないといけません。

今回のリニューアルはスマホ対応が目的の一つ。そのためにはレスポンシブデザインに簡単に対応したいのでフレームワークを使うことにします。bootstrapはwepアプリを作った時に経験しましたが、あれはちょっと重たい。もっと軽いフレームワークを探します。

Skeltonが良さそうです。

Skeleton: Responsive CSS Boilerplate

Downloadして、zipを解凍。

take@MacBook-Air ~> ll /Users/take/Downloads/Skeleton-2.0.4/
total 8
drwxr-xr-x@ 4 take  staff   136B 12 29  2014 css
drwxr-xr-x@ 3 take  staff   102B 12 29  2014 images
-rw-r--r--@ 1 take  staff   2.1K 12 29  2014 index.html

cssとimagesのディレクトリをコピーします。

index.htmlをみると,cssfavicon指定箇所があるので、使いましょう。

  <!-- CSS
  –––––––––––––––––––––––––––––––––––––––––––––––––– -->
  <link rel="stylesheet" href="css/normalize.css">
  <link rel="stylesheet" href="css/skeleton.css">

  <!-- Favicon
  –––––––––––––––––––––––––––––––––––––––––––––––––– -->
  <link rel="icon" type="image/png" href="images/favicon.png">

まずいれただけだとこんな感じに変わりますね。あとは公式HPを見て使い方を学びましょう。

f:id:take_she12:20161204101158p:plain:w300f:id:take_she12:20161204101203p:plain:w300

メニューはgridで横並びに

リスト形式になっていたのでgridで横並びに。header+menuで1コンテナ、コンテンツで1コンテナにいれました。

コミットは以下。

use grid in menu · takeshe12/toketenakunaru@14e1c3c · GitHub

f:id:take_she12:20161204111744p:plain:w500

一気にそれっぽくなりましたね。

discographyとlyricが重なっていたり。そもそも9個メニューがあるけど12分割単位じゃなく、9分割にできないのかなとか。あと箱に枠や背景色つけられないのかなとかわからないところはありますが、先に進みます。

全てのページにcssを読み込ませる

先にやっとけって話ですね、はい。

load css and add container · takeshe12/toketenakunaru@c391fb1 · GitHub

DRYじゃなくて吐きそうなんですけどどうしたらいいかもわかんないし最初はとにかく進むよ。

Biography

f:id:take_she12:20161204124125p:plain:w300f:id:take_she12:20161204124128p:plain:w300

update biography · takeshe12/toketenakunaru@ba45740 · GitHub

githubって画像もプレビューできるんだねすごい。

説明文と画像を横並びにしました。

Discopraphy

作品ごとにページ分けてたんですけど、めんどくさいので1ページにしました。

table地獄を全部書き直すのなかなかめんどくさかったです。

update discography · takeshe12/toketenakunaru@349ff1e · GitHub

箇条書きの間隔が広いのをなんとかしたいんですが、cssの変更が反映されない事件が起きてるのでとりあえずスルーします。

変更前

f:id:take_she12:20161204145754p:plain:w300f:id:take_she12:20161204145759p:plain:w300

変更後

f:id:take_she12:20161204145801p:plain:w300

Lyric

一番悩ましい。歌詞はtxtファイルをおいて、そのrawデータを表示するってことできないかなぁ。歌詞データそのものに装飾をしたくない。

それかjava script使ってクリックするとペロンと表示されるようにするか。

考えた結果、preとcodeを使ってコードブロックとして引用すればいいですね。

update lyric · takeshe12/toketenakunaru@bbc70ee · GitHub

全然DRYじゃないから嫌なんですが、多分java script使わないと、クリックしたidのファイル名のtxtファイルを表示するってできないと思うのでとりあえずスルー。

f:id:take_she12:20161204152941p:plain:w500

movie

ここは単に列挙してるので3分割でgridで置いていくとします。

変更前

f:id:take_she12:20161204153057p:plain:w500

まわりこみの挙動が変

f:id:take_she12:20161204161517p:plain:w500

ここは最初の要素にstyle=“clear:both"を指定してまわりこみさせないようにしました。

clear(要素の回り込み解除)|Box - ボックス|スタイルシート(CSS)|PHP & JavaScript Room

変更後

f:id:take_she12:20161204161458p:plain:w500

update movie · takeshe12/toketenakunaru@ad7b944 · GitHub

箇条書きの間隔

このあたりを修正。

diff --git a/css/skeleton.css b/css/skeleton.css
index f28bf6c..1d525b2 100644
--- a/css/skeleton.css
+++ b/css/skeleton.css
@@ -298,10 +298,10 @@ ul ul,
 ul ol,
 ol ol,
 ol ul {
-  margin: 1.5rem 0 1.5rem 3rem;
+  margin: 0.5rem 0 0.5rem 0.5rem;
   font-size: 90%; }
 li {
-  margin-bottom: 1rem; }
+  margin-bottom: 0rem; }

ちなみに少し上で言っていたstyle sheetが反映されない問題はやはりブラウザキャッシュでした。プラグインを導入しました。

Clear Cache - Chrome Web Store

favicon設定

skeltonのものになっていたので置き換えました。

おわりに

html編はここまで。htmlってDRY原則あんまり気にされないもんなんですかね、普段サーバサイドやってるといろいろ気になってしまう。

おいおいstyle sheetは勉強しつつHPを華やかにしていこうと思いますが、とりあえず最低限やったのでここまで!次回はいよいよ本番環境にデプロイします!

Ruby - Enummerable#grep

はじめに

kawasaki.rbに参加してきました。

kawasakirb.connpass.com

togetter.com

Perfect Ruby読書会

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

5.5.1 Enummerableなオブジェクト > ブロックを評価した結果の配列

まぁmapとか出てきたんですが、一番びっくりしたのはgrepですね。

ref.xaio.jp

===で比較して、マッチしたものを返すようですが、===の挙動が引数にとるobjectによって違うと。

Regexp

正規表現マッチ。

irb(main):042:0> array = [1, 2, "String", "string", "integer"]
=> [1, 2, "String", "string", "integer"]
irb(main):043:0> array.grep(/^s/)
=> ["string"]

Module

そのクラスに属するかどうか。

irb(main):045:0> array.grep(String)
=> ["String", "string", "integer"]
irb(main):046:0> array.grep(Integer)
=> [1, 2]

ブロック

irb(main):048:0> array.grep(String) {|str| str.upcase}
=> ["STRING", "STRING", "INTEGER"]

なるほど。

Enumerableモジュール

Enumerable - Rubyリファレンス

今回はarrayを例にしましたが、hashやstructもそうですね。数え上げることができる、ってことで.all?やany?といったメソッドをだしています。このへん今までまったく使ったことなくてはじめて知りましたね。

おわりに

わずか15分程度の読書会でたくさん発見あったので、勉強会、大切。そしてアウトプットする週間がついてからインプットの場に行くとその効果を実感。またkawasaki.rbいきます!

ブログのリファクタリング

はじめに

ブログのカテゴリわけについて過去何回か考えてました。

take-she12.hatenablog.com

take-she12.hatenablog.com

take-she12.hatenablog.com

月イチカテゴリメンテをやるといって一切やってないですね。(笑)

ブログを本格的に書き始めて1年が経ちましたので、どういう内容の記事を書くか、どういう記事を書かないか、を含めて、カテゴリ内容を見直していこうと思います。

小記事カテゴリの削除

f:id:take_she12:20161202170654p:plain

とっちらかってますね。

まず、1年間で記事がほとんどかかれなかったカテゴリは削除します。記事は非公開にしようか迷ったのですが、一応残しておきます。

  • 教育 (4)
  • 映画 (2)
  • ファッション (2)
  • ビジネス (2)
  • 酒 (1)
  • Web (1)
  • カレー (1)
  • チーム (1)
  • ドキュメント (1)
  • ブラウザ (1)

カレーは別のブログを立ち上げましたので、そちらに書いていきます。

curryengineer.hatenablog.com

他のテーマも個人的に興味はある分野ではあるのですが、カテゴライズするほどの量が出てきていない=ブログの性格を示すコンテンツにはなりえないので消します。映画は今年の後半にハマったので難しいところ、復活させるかもしれません。

その他は100害あって1利なしと言いましたが、カテゴライズするに満たない記事については一旦その他をつけてリリースし、定期的にその他を見直す、というのもアリかなと思いました。

カテゴリ階層化の廃止

そんな細かく分類しても外から見えないようになってるし、もうざっくりでいいかなと思いました。

フレームワークとか内容ごとに分けてもなぁと思います、それはもう親カテゴリに一回返してあげようと思います。

作業途中ですけど、こういうやつですね。

f:id:take_she12:20161202172810p:plain

これから

ソフトウェア的な記事は以前より減る予感はしてます。本を読んだ感想、本を読んで考えたこと、本に関係なくとも何か考えたことはこれkらも投稿すると思います。(とはいえ、エッセイや単なる考えだけの記事は最近noteに移行しつつあるんですが。)あと、どう考えても音楽が浮いてるんですが、今の所分離する気はないです。

やっぱりブログはひとに見てもらうとか、アクセス数稼ぐとかよりは。自分の思考をアウトプットするときの、友達なんですよ。だからコンテンツとして振り切れないんですね。それでいいと思います。これからもよろしくね。ありがとう、はてなブログ

記事数

2016年こんなに書いたのね。。。(記事作成日時点)

f:id:take_she12:20161202170701p:plain

181って2日に1回やん。まぁ最初の3ヶ月は毎日更新してたからそのおかげだけどね。続くもんだね。毎日更新やめてもそれなりに書いてるってことは、好きなんだなぁ。

SoftwareDesign6月号「bash再入門」でbash復習

はじめに

基本的にSoftwareDesignは特集で買うかどうかを決めます。なぜかというと連載モノは連続で買わないと読めないんですよね。というか最初から読まないといけない、に近い。1つで完結した内容になってないんですよね。まぁそれはさておき。

今回の特集は「bash再入門」と「MySQLを武器にSQLをはじめよう」の2つ。

bashを使わずに仕事をすることはできません。基本的な内容はあるとしても、何か1つでも得ることはあるだろうと思い、これを機に復習することにしました。

MySQLのほうもMariaDBいれたりガレラクラスタ組んだりして、SQLもしもしする練習もしたいんですが、今回は見送り。

bashとは何か?

第1章 bashとは何か〜古くて新しいシェル環境 より

bashって何ですか?というのを知ったのは実は最近だったりする。。。シェルはユーザインターフェイスのことと言ってもいいだろう。ユーザとUNIXカーネルの橋渡しをする存在。そのシェルの中でもbashcshzshと様々な種類のソフトウェアがある。ほとんどのLinuxディストリビューションにおいてbashが標準であるため、bashは最低限押さえておく必要がある。

同期氏はzsh推しだから使ってみたい気もするけど、まずは標準からですね。

今使っているシェルを確認する

第2章 最初につまづかないためのbashひとめぐりより

普段自分が今何のシェルを使っているかを意識したことがないので、おそらくbashだったのでしょうが、確認しておきましょう。

インストールされているシェル

/etc/shellsを確認してみます。

MacBook-Air:~ take$ cat -n /etc/shells 
     1 # List of acceptable shells for chpass(1).
     2 # Ftpd will not allow users to connect who are not using
     3 # one of these shells.
     4 
     5 /bin/bash
     6 /bin/csh
     7 /bin/ksh
     8 /bin/sh
     9 /bin/tcsh
    10 /bin/zsh

ログインシェル

$SHELLに入っているようです。

MacBook-Air:~ take$ echo $SHELL
/bin/bash

シェルを変更する

chshで変更します。

MacBook-Air:~ take$ chsh -s /bin/zsh
Changing shell for take.
Password for take: 
MacBook-Air:~ take$ 

ログインシェルは通常/etc/passwdに書かれてあるらしいですが、Macの場合別の場所で管理されてるそう。

システム環境設定→ユーザとグループから。

f:id:take_she12:20160605203112p:plain

f:id:take_she12:20160605203117p:plain

ちゃんとログインシェル変わってますね。

シェルのショートカットキー

Ctrl-aで行頭、Ctrl-eで行末へ移動知らなかった。。。カーソル連打で戻ってたよ。。。

その他単語レベルでの移動やカットも便利そう。

history(コマンド実行履歴)の利用

たまに過去のコマンド探すのにhistoryをgrepしたりはしますが、これ、Ctrl-rで検索できるじゃん。。知らなかったよ。。。

(reverse-i-search)`grep': grep take /etc/passwd

(Ctrl-rを押すと(reverse-i-search)と表示され、文字を入力すると候補が出る。続けてCtrl-rを押せば上にあがっていく。

シェルスクリプトの復習

第4章 シェル芸問題で腕を磨け!テキスト処理・計算・調査の定石 より

シェル芸!何でもワンライナーで書く必要はないですが、その能力は必ず役に立ちますよね。この章で出てくるコマンドについて復習します。

tr

ファイル内の文字を一括変換する、と言われてもイマイチピンとこない。

Linuxコマンド集 - 【 tr 】 文字を一括変換する:ITpro

オプションなし

MacBook-Air:bash take$ cat test.txt 
hogepogehogepoge
hogepogehogepoge
hogepogehogepoge

MacBook-Air:bash take$ cat test.txt | tr hoge HOGE
HOGEpOGEHOGEpOGE
HOGEpOGEHOGEpOGE
HOGEpOGEHOGEpOGE

これ、単語レベルじゃなくて、hはHに、oはOにgはGに、eはEに変換されるんですね。

-cオプション

MacBook-Air:bash take$ cat test.txt | tr -c ge GE
EEgeEEgeEEgeEEgeEEEgeEEgeEEgeEEgeEEEgeEEgeEEgeEEgeEEMacBook-Air:bash take$ 

ごめんどういう挙動か全然わかんない。。。

manを見てみる。

     -C      Complement the set of characters in string1, that is ``-C ab''
             includes every character except for `a' and `b'.

     -c      Same as -C but complement the set of values in string1.

String1で指定した文字以外の文字を、String2で指定した文字列に置換するのか。

MacBook-Air:bash take$ cat test2.txt 
1234
5678
90
MacBook-Air:bash take$ cat test2.txt | tr -c 159 a
1aaaa5aaaa9aa

1,5,9以外の文字が全てaに置換されてますね。ちなみにString2をabとすると全部bに変わっちゃいます。最後の文字を対象にしているのかな。補集合を変換したいときに使うんですね。で、改行文字も変換されちゃってるってわけか。

-dオプション

これは削除なのでわかりやすい。

MacBook-Air:bash take$ cat test2.txt 
1234
5678
90
MacBook-Air:bash take$ cat test2.txt | tr -d 159
234
678
0

-tオプション

String1をString2の長さに切り詰めるって何を言ってるかわかんないので使ってみます。

MacBook-Air:bash take$ cat test2.txt | tr -t 123 123
tr: illegal option -- t
usage: tr [-Ccsu] string1 string2
       tr [-Ccu] -d string1
       tr [-Ccu] -s string1
       tr [-Ccu] -ds string1 string2

おこられる。確かにmanに載ってない。なんだこれ。

-sオプション

連続文字を1文字にする

MacBook-Air:bash take$ cat test3.txt 
hogeeeeeeeeee
pogeeeeeee
togee
MacBook-Air:bash take$ cat test3.txt | tr -s e
hoge
poge
toge

分かりやすいね。

xargs

xargs コマンド | コマンドの使い方(Linux) | hydroculのメモ

ファイル名の一覧を標準入力から受け取って、そのファイル一覧を任意のコマンドに引数として渡すコマンド。ファイル一覧でなくてもなんでもよい。

日本語で頼む。

findもしくはls、またはファイル一覧を入力として、それを1つずつ次のコマンドに渡してやるって感じかな。

MacBook-Air:bash take$ ls
test.txt    test2.txt   test3.txt
MacBook-Air:bash take$ ls | xargs cat
hogepogehogepoge
hogepogehogepoge
hogepogehogepoge

1234
5678
90
hogeeeeeeeeee
pogeeeeeee
togee

なるほど。覚えておいたら使いドコロがありそうだ。

bc

数値計算を行う。

やってみる。

MacBook-Air:bash take$ echo 1+3 | bc
4

なるほど、前の式を渡してやれば計算してくれるのか。

おわりに

実は下書きのまま残っていたものを投稿しました。このあとfishの特集があり、これを読んだ時にfishをいれて今も使っているのですが、使いこなせてないので、機能調べがてら、fishの記事を書こうと思います。