世紀末の渋谷ハロウィンから逃避して、千葉で開発合宿をした話
どうも、モテモテになりたいmotemotentenです。10/30~11/1 にかけて、千葉の 土善旅館 にて開発合宿を行いました。 参加者はPRESS BLOGの開発チームの以下4名です。(ライターの主観が入っています)
-
- 愛されCTO 兼 CEO ( Cheif Esa Officer )
- ツッコミ担当
- 弊社には珍しい常識人
- PRESS BLOG の開発
- インスタグラマー www.instagram.com
-
- 赤髪の
シャンクスプログラマー、リードエンジニア - PRESS BLOG の公式iPhoneアプリの開発
- 口癖は「チュパチュパ」
- 最近ハマっていることは、盆栽
- よくお菓子くれる
- オフィスのBGM担当、DJ、替え歌得意
- いびきなら誰にも負けない
- 赤髪の
-
- 社内ツールの開発
- パパ担当
motemotenten
- 新規事業のサービス開発
- 幹事
- みんなの弟
1日目
出発
弊社の開発陣はみんな夜型なので、眠気の中出発です。
パパ担当のkey の運転で宿まで向かいます。
車内では、二刀流で有名な大谷翔平と同じく岩手出身のredhairedsomu が田舎あるあるを披露し盛り上げてくれました。
ランチ
ランチはしじみ丼が有名な 青柳亭 にて食べました。 the 地元のお食事処という感じで、赤髪のredhairedsomuは完全に浮き気味でした。
土善旅館到着
渋谷から車で2hほどで到着しました。
開発部屋の様子。外部ディスプレイや Yogibo・電源タップにホワイトボード・200インチのスクリーン&プロジェクタまで完備されていて、この充実具合に思わずCTOも思わず2件連続tweetしていました。
土善旅館に開発合宿出来てるけど、
— さいぬ🤪.o0( PRESS (@sainuio) 2018年10月30日
ここ、控えめに言って、神です。最高です。
次の開発合宿も余裕でここが良い
土善旅館=開発合宿の聖地
— さいぬ🤪.o0( PRESS (@sainuio) 2018年10月30日
と呼ぼう
テーマ発表
荷物を置き、ホッと一息ついてから、今回の合宿での開発目標の発表をしました。 今回は各メンバーそれぞれ自身の通常業務を行うという形でしたが、今後人数増えていくにしたがって参加者で一つのテーマに着手するような形でもやりたいですね。
開発
猫と戯れつつも各自、淡々と進捗を生んでいきます。
夕食
待ちに待った夕食です。基本弊社のエンジニアはコンビニ飯なので、こういった食事は体に染みました。
二日目
ランチ
二日目のランチは、表参道にあってもおかしくないような佇まいのとんかつ屋さんのいなよし にてランチを食べました。
食後は、運動も兼ねて車で海に行きました。海まではだいたい土善旅館から車で20分程度でした。
各自広大な海を目の当たりにして、いろいろ思うところがあったようです。
宿に帰り開発!
立ち作業でも進捗を生んでいきます。
夕食
二日目の夕食は串焼きでした。
なお、ハロウィーン仕様になっていた模様。
ちなみに PRESS BLOG もハロウィーン仕様でした。
開発の追い上げ、渋谷ハロウィンに対抗
開発合宿もハロウィン仕様になりました。
ワリオもお疲れの模様です。
そしてここから追い込みます。
結局この日はみんな朝食まで開発していました。
最終日
成果発表
朝まで開発した成果はどうでしょうか
ご満悦の様子です。
まとめ
非日常感というのが集中力を高めてくれていて、生産性が高い状態で作業ができました。
そんな PRESS BLOG ではエンジニアを募集しています。
- 業務歴3年以上
- 転職希望
- toC向けサービスをやりたい
上記に当てはまる人は以下のアカウントに連絡してください!
月間2000万pvでている http://pressblog.me というブログサービスの開発、または、その周辺プロジェクトの開発を一緒にしてくれる仲間を探してます!!
参考になった記事
渋谷で働くちょいワル(?)社長おすすめの2万のビジネス書を読んでおもったことを書く
どうも、事業を成功させてお金を稼いでモテモテになりたいmotemotentenです。事業をやってきてモテモテになった社長の溝口(自称稼ぐ前からモテてたらしい)を超えるべく先日このブログで紹介したユダヤの商法を読んだので、思ったことを書きたいと思います。
こちらのブログの続きです。気になる方はこちらも読んでみてください。
- 作者: 藤田田
- 出版社/メーカー: ベストセラーズ
- 発売日: 1972/05
- メディア: 単行本
- クリック: 50回
- この商品を含むブログ (18件) を見る
この「日本マクドナルド」創業者の藤田田が書いた「ユダヤの商法」を要約すると主に以下の3つの内容に集約されます。
- 商売をするときは、女(女性)と口(食品)を狙え
- 数字と時間を大事にしよう
- 契約は必ず守ろう
商売をするときは、女(女性)と口(食品)を狙え
まず1つ目についてです。女性をターゲットにした商売をするべきというのは大いに賛成です。オフィスにいても、女性はいつもオシャレで華やかな格好をしていて、僕とかはユニクロの3つで500円とかのTシャツを着ています。明らかに女性の方がお金を使います。異議は認めません。
総務省の平成26年全国消費実態調査でも、「単身世帯のうち勤労者世帯の実収入は,男性が女性よりも多い」「単身世帯のうち勤労者世帯の消費支出は,女性が男性よりも多い」という調査結果がでてるそうです。
http://www.stat.go.jp/data/zensho/2014/pdf/gaiyo2.pdf
ただ口に入れるもの(食品)を狙うというのは、あまり賛成できません。これだけ、様々なチェーンの飲食店が増えてる今、新しくそこに参入するというのはなかなか厳しい気がします。
ちなみに僕がよく食べるのは、大盛り券が無料の富士そばの300円のもりそばです。
数字と時間を大事にしよう
次に2つ目です。ユダヤ人は、数字に強くて時間を大切にするそうです。 数字に強いという性質は、仕事のできる人に共通していることだと思っていて、基本的に仕事ができる人は意思決定を数字で行う人が多いと思います。ちょっとしたことでも自分なりの仮説で数値化して、判断しています。たとえば、東京にあるマックが何店舗かというようなことを考えるときに、渋谷には3店舗くらいあり、東京にある駅の平均のマックの店舗数が1.5店舗だと仮定すると、東京には654駅あるので、654*1.5=981店舗ということになります。(ちなみに、東京にあるマックの数は340軒だそうです。) 今回は外しましたが、数字に強いというのは商売をする上で大事な要素だと思います。
マクドナルド店舗数【総数順】 [ 2018年第一位 東京都 ]/都道府県別統計とランキングで見る県民性
もう一つ時間についてですが、ユダヤ人は時間を非常に大切にするそうです。これも仕事のできる人に共通することですが、電話・急な訪問など、予定せずに相手の時間を奪うようなことは絶対にしない気がします。僕も日々、ありとあらゆる時間を計測して、「あー、ちょっと友達と話しすぎちゃったな」とか反省したりしてます。
数字に強くあることと、時間を大切にすることは、圧倒的同意です。
契約は必ず守ろう
最後の「契約を必ず守ろう」ですが、これはいわゆる法的な契約書と個人同士の約束の両軸あると思ってます。法的な契約書できちんと条件を握っておくのは、外国に比べると日本ではまだ甘いところがあると思っていて、そういう意味で約束をちゃんと明文化して契約書という形で合意を取るというのは、お金を扱う上で非常に大事だと思います。個人同士の約束という点も、一度やると言ったことを必ずやるというのが、一つ一つ信頼になっていくので、商売をやる上では大事だと思いました。
3つ目だけなんとなく雑になってしまいましたが、そんなこんなで今日は失礼したいと思います。最後まで読んでくれてありがとうございました。今amazonで2万にまでなっている絶版本を借りたい人・"挑戦する全ての人に公正に活躍するチャンスを提供する" 月間2000万PVのPRESS BLOG の運営に関わりたい方は以下に連絡してください!!
PRESSのちょいワル(?) 社長が今若者に読んでほしい本5選+α
どうも、最近 PRESS BLOG を手伝っているエンジニアの motemotenten です。久しぶりに食べた松屋の牛丼が美味しすぎて涙が出ました。
ところで、今日も黒い画面をカタカタやってたわけですが、仕事の合間に PRESS を作ってる凄腕エンジニアの @sainu さんと PRESS を作った社長の話になりました。そうするとどうやら、PRESS を作った社長は、どうやら今までいろんな事業をやってきていて、商売の天才らしいということを聞きました! 普段牛丼を食うお金すら惜しくなる僕は、それを聞いて思いました!「よし僕もこっそり社長からそのエッセンスを聞いて商売して、松屋の普通の牛丼じゃなくて、チーズ牛丼毎日食ってやる」と。
ということで、僕が話しかけたら慌てて YoutTube を閉じた社長の溝口(@yasainet)におすすめされた本を紹介します。(本当はみんなには内緒にしたいのですが、社長に言われたのでしょうがなくこの記事を書きました。)
1. ユダヤの商法―世界経済を動かす
- 作者: 藤田田
- 出版社/メーカー: ベストセラーズ
- 発売日: 1972/05
- メディア: 単行本
- クリック: 50回
- この商品を含むブログ (18件) を見る
この本は、「日本マクドナルド」「日本トイザらス」を作った藤田田さんが書いた本で、お金持ちが多いとされるユダヤ人のビジネスにおけるノウハウが書いてあるそうな。
なおソフトバンクを作った孫さんもどうやらこの本を熟読しているらしいです。
社長がこの本において大事にしていることは、特定の土地をもたない民族が商売で成り上がった背景を知ることと、女性を相手に商売することでした。 商売の方法は数多くあるかもしれないが、社長が入信した商売の宗教はこのユダヤの商法らしい。
なお、今は絶版になってしまっているようで、Amazonで買おうとすると、二万弱くらいかかるので、さっそく買った僕は、今月もチーズ牛丼が食べられなさそうです。
2. 女の一生
- 作者: モーパッサン,新庄嘉章
- 出版社/メーカー: 新潮社
- 発売日: 1951/02/22
- メディア: 文庫
- クリック: 7回
- この商品を含むブログ (20件) を見る
話し合いの途中から、「私も聞いていいですか?」と参加してきた、早稲田大学に在籍しながらPRESSでインターンをしている @maiyan に、社長が読んでほしい本だと言ってました。
おとぎ話のようなロマン主義の時代から打って変わって、自然主義文学の時代の作品であり、救いのない話だと。
一人の女性として、人間として、これを読んでどう感じるのか。 若いうちに、自然主義であったり現実主義に触れることで、自身の価値観を考え直すきっかけになるのでは、と話をしていた。
3. 封神演義・水滸伝・史記・項羽と劉邦・三国志
「これはちょっと頭をよく見せる”tips”なんだけど」と、言い出した社長。 なんのことやら、と話を聞いていたら以下のように話をしていた。
キングダムって流行ってるよね? まずキングダムの歴史的背景を知るために、その前後の本も予備知識として知っておいたほうがいい。 キングダム単体だけではなくて、封神演義・水滸伝・史記・項羽と劉邦・三国志まで読破しておくことで、ある程度は中国の歴史を学ぶことができるよね。 そうすることで、キングダムの時代におきた”法治国家”になったことの重みが理解できたりする。 前後の文脈を知ってるか知らないかで、キングダムの解像度と輪郭がくっきり見えてくると思う。 それに、この前後を知っているだけで、勝手に感心されてよく勉強してる人だなって思われるんだよ。
とのこと。
映画、音楽、娯楽、小説、インターネットのサービスなどなど、すべての物事において前後の文脈への理解があることで、解像度と輪郭が見えてくるという話だった。
なるほどなー!
4. わが闘争
- 作者: アドルフ・ヒトラー,平野一郎,将積茂
- 出版社/メーカー: 角川書店
- 発売日: 1973/10/01
- メディア: 文庫
- 購入: 14人 クリック: 129回
- この商品を含むブログ (71件) を見る
ヒトラーの本。 近代における良くも悪くも大きな影響力を与えた人の本は読んでおくべきだと話をしていた。 特に、大事にしているのは大衆性(ポピュラリティ)だった。
社長がキングダムの話をしているときに、呂氏春秋における一字千金の話をしていた。 いままで法治国家じゃなかった国が、法治をするために、大衆にまで法を説いた一字千金の話と関係しているとのこと。
正論をそのまま伝えても、大衆は動かない。会社も動かない。 大事なのは、大衆が動くように共感を得ながら扇動しつつも本質は外さないこと。
歴史的に見て批判を受けているかもしれないが、悪いところだけではなく、なぜそこまで大衆を扇動することができたのか?という点に着目してほしいとのことだった。
5. 聖書・コーラン・死者の書
宗教や死生観にまつわる本だが、ここで大事にしてほしいことは2つだと話をしていた。
過去の歴史上最も出版された聖書を読むということ。 激動している歴史の中で、ここまで残っている文章には真理が多くあるのではないかと話をしてた。 「100年残っている言葉は真理だと考えていい」というのは印象的だった。 ちなみに採用において大事にしたことは「先ず隗より始めよ」らしい。 いい部下が欲しかったら、まずは側近の部下の待遇を良くすることである、とのこと。 それによって @sainu の給料があがって、いい開発メンバーが増えたことはあとから聞いた。 なるほど、僕の給料も早々に上げてほしいものである!
日本では中国文化に影響された倫理観が多く散見されていることから、世界中の倫理観や死生観を学ぶべきだという話。 アフリカ、欧米、アジアとざっくり分けて、それぞれの死生観に触れることは、自分の価値観や判断基準をひろげる手助けになるだろうとのこと!
以上、社長が今若者に読んでほしい本でした。
上記の本を借りたい・自分も社長の @yasainet と話してみたい・"挑戦する全ての人に公正に活躍するチャンスを提供する" 月間2000万PVのPRESS BLOG の運営に関わりたい方は以下に連絡してください!!
追記 - この話を聞いた後、松屋で牛丼をごちそうになりました。本当に美味しかったです。ごちそうさまでした。
スマブラ一筋で生きてきたゲーマーがPRESSにジョインした話
2018年5月27日 PRESSに入社しました。大阪出身、現在二十歳のえつじ( えつじ(@kn_tsuji)さん | Twitter )と言います!
ゲーマーとして生きてきた10代
軽く自己紹介させてもらうと、根っからのゲーマーで中学から6年前後、任天堂のゲーム、スマブラに大半の時間を捧げる人生をおくってきました。
月に一回行われる大会を楽しみに毎日を過ごし、才能があったのか、ぐんぐん実力を伸ばし、早いペースで日本でも有数のトッププレイヤーになりました。 思い返すと僕にとってスマブラは、部活動の代わりの様な存在であったと思います。
参考記事&動画 fgamers.saikyou.biz
1P側、シークが自分です。 www.youtube.com
スマブラをプレイする事への葛藤
そんな情熱を注いでいたスマブラですが、段々とプレイする時間が減っていきました。 ゲーム以外にも何かしなくちゃという気持ちや、消費するだけの毎日に嫌気が差していたんです。 当時、ゲームで食っていくという考えが無かったわけではないですが、そんな突き抜ける気概も根性もなく気持ちに蓋をし、違う分野で食えるようになったらまた戻ろうと言った感じでゲーム活動はほぼストップしました。俗に言う妥協です。
自分と同じフィールドにいたかつてのプレイヤーが活躍する話を聞くたび、耳を塞いで「やれば俺だって」という想いで唇を噛みしめ、気持ちを抑えました。
そんなこんなで、自分に合うものは何かと探し奔走していた所、ITエンジニア職に目が止まりました。 エンジニアは実力をある程度つければ、フリーで自由に働くことができる。という情報が魅力的で、「これならスマブラ活動と両立していけるんじゃないか」と思い、目指すことに決めました。
そう決めてから、東京のプログラミングスクールに行くために上京。本格的に勉強を始めました。が、スクールでの勉強はイマイチ集中できず、モチベーションが低迷していました。 日に日に実践で身に付けたい、どうにか現状を変えたいという思いが強くなり、何か行動しようとツイッターでベンチャー企業のCEOさん何人かに会いに行くことに。 PRESSの匠さん(溝口匠😣❣(@yasainet)さん | Twitter)もその内の一人でした。
匠さんと会ってスマブラの話をすると、面白がって頂いて、スポンサードしてもいいと言われ衝撃を受けました!エンジニアとして学びつつ、スマブラに打ち込める環境があるんだと。 この最高の環境で頑張るしかないと! スクールを辞退し、入社を決意するに到りました。
PRESSのえつじとして、世界一を目指す
最後に目標ですが、スマブラでは世界一のプレイヤーになります。 やりさえすれば一番強いのは自分だと、証明したいです! そして、広告塔としての自覚を持って、アピール力を高めていきたいと考えています。 エンジニアとしては、作品を完成させた経験がまだないので、作品を生成し、実務に携われるよう精進したいと思います! どちらの分野でも、PRESSの一員として貢献出来る様になります!どうかよろしくお願いします。
追記
対戦相手は常時募集中ですので、いつでもお声がけください(^ ^)
Linuxディスク使用量を100%から40%まで減らした
こんにちは、PRESSの開発統括をしているさいぬ(sainu_____)です。
今回は、EC2インスタンスのディスク使用量が100%になり、サーバーが落ちてしまったので、その時に施した対応についてまとめたいと思います。
状況把握
とりあえずディスク使用量を df
コマンドで確認します。
[ec2-user@ip-172-31-15-187 log]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda1 59G 59G 00G 100% / devtmpfs 1.9G 56K 1.9G 1% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm # 左から以下の項目で表示されます # ファイルシステムの名前 割りあてサイズ 使用領域サイズ 空き領域サイズ 使用率 マウントポイント
Use%
が100%で、ファイルシステムの容量がいっぱいになってしまっています。
ディスクがいっぱいだと、データの書き込みができなくなり、サーバーのプロセスが停止してしまうことがあります。つまり、サーバーが応答しなくなります。
サイズが大きいファイルを探す
サーバーのファイルシステムを圧迫している主な原因はだいたいログファイルです。また、PRESSではnginxとRailsで開発しているので、nginxとRailsのログファイルが含まれるディレクトリのサイズを確認してみます。
出力のメモを取り忘れてしまったので、入力コマンドだけ・・・
以下のコマンドで、nginxとrailsのログの使用量を見てみます。すると、それぞれ合わせて30GB近くありました。まずいですね、ログローテーションをちゃんと設定していればこんなことにはなりません。
[root@ip-172-31-15-187 nginx]# du -h --max-depth=1 /var/log [root@ip-172-31-15-187 nginx]# du -h --max-depth=1 /var/www/press/shared
-h
オプションはサイズをGB
やMB
のように、桁数が大きい容量に関しては単位を付けて見やすく表示します。
--max-depth=1
は、出力するディレクトリ階層を1段階に指定します。これを省略すると、ディレクトリを再帰的に表示するので、サイズが大きいディレクトリが特定しにくくなります。
圧縮
では、nginxとrailsのログファイル内を見てみます。
[root@ip-172-31-15-187 nginx]# ls -lah total 23G drwx------ 2 nginx nginx 12K May 26 03:42 . drwxr-xr-x 8 root root 4.0K May 26 16:03 .. -rw-r--r-- 1 nginx nginx 58M May 26 18:25 access.log -rw-r--r-- 1 root nginx 407M Dec 19 03:43 access.log-20171218 -rw-r--r-- 1 root nginx 1.2G Dec 24 03:46 access.log-20171220 -rw-r--r-- 1 root nginx 1.2G Dec 30 03:30 access.log-20171226 -rw-r--r-- 1 root nginx 321M Jan 1 03:11 access.log-20171231 -rw-r--r-- 1 root nginx 2.5G Jan 10 03:12 access.log-20180102 -rw-r--r-- 1 root nginx 2.4G Jan 16 03:25 access.log-20180111 -rw-r--r-- 1 root nginx 1.2G Jan 18 03:14 access.log-20180117 -rw-r--r-- 1 root nginx 976M Jan 20 03:16 access.log-20180119 -rw-r--r-- 1 root nginx 2.5G Jan 25 03:14 access.log-20180121 -rw-r--r-- 1 root nginx 1017M Jan 27 03:43 access.log-20180126 -rw-r--r-- 1 root nginx 1.1G Feb 7 03:16 access.log-20180202 -rw-r--r-- 1 root nginx 425M Feb 10 04:41 access.log-20180209 -rw-r--r-- 1 root nginx 309M Feb 12 03:12 access.log-20180211 -rw-r--r-- 1 root nginx 1.2G Feb 20 03:41 access.log-20180213 -rw-r--r-- 1 root nginx 255M Feb 25 03:24 access.log-20180223 -rw-r--r-- 1 root nginx 614M Mar 2 03:35 access.log-20180226 -rw-r--r-- 1 root nginx 211M Mar 7 03:33 access.log-20180306 -rw-r--r-- 1 root nginx 327M Mar 17 04:20 access.log-20180315 -rw-r--r-- 1 root nginx 291M Mar 20 03:43 access.log-20180318 -rw-r--r-- 1 root nginx 241M Mar 30 03:18 access.log-20180329 -rw-r--r-- 1 root nginx 457M Apr 6 03:20 access.log-20180403 -rw-r--r-- 1 root nginx 209M Apr 10 03:19 access.log-20180409 -rw-r--r-- 1 root nginx 205M Apr 12 03:19 access.log-20180411 -rw-r--r-- 1 root nginx 187M Apr 16 03:18 access.log-20180415 -rw-r--r-- 1 root nginx 163M Apr 19 03:23 access.log-20180418 -rw-r--r-- 1 root nginx 7.2M Apr 20 03:28 access.log-20180420.gz -rw-r--r-- 1 root nginx 7.2M Apr 21 04:29 access.log-20180421.gz -rw-r--r-- 1 root nginx 8.8M Apr 22 03:42 access.log-20180422.gz -rw-r--r-- 1 root nginx 314M Apr 25 03:45 access.log-20180423 -rw-r--r-- 1 root nginx 7.4M Apr 26 03:06 access.log-20180426.gz -rw-r--r-- 1 root nginx 5.5M Apr 27 03:37 access.log-20180427.gz -rw-r--r-- 1 root nginx 6.1M Apr 28 03:26 access.log-20180428.gz -rw-r--r-- 1 root nginx 184M Apr 30 03:17 access.log-20180429 -rw-r--r-- 1 root nginx 375M May 4 03:18 access.log-20180501 -rw-r--r-- 1 root nginx 251M May 6 12:20 access.log-20180505 -rw-r--r-- 1 nginx nginx 1.7M May 7 03:24 access.log-20180507.gz -rw-r--r-- 1 root nginx 9.2M May 8 03:30 access.log-20180508.gz -rw-r--r-- 1 root nginx 8.0M May 9 03:25 access.log-20180509.gz -rw-r--r-- 1 root nginx 328M May 12 03:16 access.log-20180510 -rw-r--r-- 1 root nginx 273M May 14 00:30 access.log-20180513 -rw-r--r-- 1 nginx nginx 658K May 14 03:09 access.log-20180514.gz -rw-r--r-- 1 root nginx 440M May 17 11:50 access.log-20180515 -rw-r--r-- 1 nginx nginx 90M May 18 09:55 access.log-20180518 -rw-r--r-- 1 nginx nginx 282M May 20 07:49 access.log-20180519 -rw-r--r-- 1 nginx nginx 126M May 21 04:58 access.log-20180521 -rw-r--r-- 1 nginx nginx 223M May 23 08:33 access.log-20180522 -rw-r--r-- 1 nginx nginx 198M May 25 03:17 access.log-20180524 -rw-r--r-- 1 nginx nginx 142M May 26 09:00 access.log-20180526 -rw-r--r-- 1 nginx nginx 428K May 26 17:45 error.log -rw-r--r-- 1 root nginx 4.6M Dec 19 03:43 error.log-20171218 -rw-r--r-- 1 root nginx 7.4M Dec 24 03:18 error.log-20171220 -rw-r--r-- 1 nginx nginx 205 Dec 20 03:38 error.log-20171221 -rw-r--r-- 1 nginx nginx 207 Dec 21 03:39 error.log-20171222 -rw-r--r-- 1 nginx nginx 207 Dec 22 03:48 error.log-20171223 -rw-r--r-- 1 root nginx 2.4M Dec 30 03:00 error.log-20171226 -rw-r--r-- 1 nginx nginx 205 Dec 26 03:20 error.log-20171227 -rw-r--r-- 1 nginx nginx 207 Dec 27 03:28 error.log-20171228 -rw-r--r-- 1 nginx nginx 207 Dec 28 03:33 error.log-20171229 -rw-r--r-- 1 root nginx 524K Jan 1 03:07 error.log-20171231 -rw-r--r-- 1 root nginx 551K Jan 10 02:39 error.log-20180102 -rw-r--r-- 1 nginx nginx 207 Jan 2 03:14 error.log-20180103 -rw-r--r-- 1 nginx nginx 207 Jan 3 03:39 error.log-20180104 -rw-r--r-- 1 nginx nginx 207 Jan 4 03:35 error.log-20180105 -rw-r--r-- 1 nginx nginx 205 Jan 5 03:45 error.log-20180106 -rw-r--r-- 1 nginx nginx 207 Jan 6 03:41 error.log-20180107 -rw-r--r-- 1 nginx nginx 205 Jan 7 03:30 error.log-20180108 -rw-r--r-- 1 nginx nginx 207 Jan 8 03:22 error.log-20180109 -rw-r--r-- 1 root nginx 12M Jan 16 03:24 error.log-20180111 -rw-r--r-- 1 nginx nginx 207 Jan 11 03:49 error.log-20180112 -rw-r--r-- 1 nginx nginx 207 Jan 12 03:27 error.log-20180113 -rw-r--r-- 1 nginx nginx 205 Jan 13 03:25 error.log-20180114 -rw-r--r-- 1 nginx nginx 207 Jan 14 03:11 error.log-20180115 -rw-r--r-- 1 root nginx 37M Jan 18 02:58 error.log-20180117 -rw-r--r-- 1 root nginx 1.7M Jan 20 03:15 error.log-20180119 -rw-r--r-- 1 root nginx 75M Jan 25 03:03 error.log-20180121 -rw-r--r-- 1 nginx nginx 207 Jan 21 03:20 error.log-20180122 -rw-r--r-- 1 nginx nginx 207 Jan 22 03:38 error.log-20180123 -rw-r--r-- 1 nginx nginx 207 Jan 23 03:10 error.log-20180124 -rw-r--r-- 1 root nginx 4.4M Jan 27 03:32 error.log-20180126 -rw-r--r-- 1 root nginx 1019K Feb 7 03:13 error.log-20180202 -rw-r--r-- 1 nginx nginx 207 Feb 2 03:19 error.log-20180203 -rw-r--r-- 1 nginx nginx 205 Feb 3 03:12 error.log-20180204 -rw-r--r-- 1 nginx nginx 207 Feb 4 03:43 error.log-20180205 -rw-r--r-- 1 nginx nginx 207 Feb 5 03:26 error.log-20180206 -rw-r--r-- 1 root nginx 287K Feb 10 04:38 error.log-20180209 -rw-r--r-- 1 root nginx 161K Feb 12 03:05 error.log-20180211 -rw-r--r-- 1 root nginx 1.2M Feb 20 03:38 error.log-20180213 -rw-r--r-- 1 nginx nginx 207 Feb 13 03:48 error.log-20180214 -rw-r--r-- 1 nginx nginx 205 Feb 14 03:06 error.log-20180215 -rw-r--r-- 1 nginx nginx 207 Feb 15 03:18 error.log-20180216 -rw-r--r-- 1 nginx nginx 205 Feb 16 03:21 error.log-20180217 -rw-r--r-- 1 nginx nginx 205 Feb 17 03:34 error.log-20180218 -rw-r--r-- 1 nginx nginx 205 Feb 18 03:37 error.log-20180219 -rw-r--r-- 1 root nginx 6.1M Feb 25 03:24 error.log-20180223 -rw-r--r-- 1 nginx nginx 205 Feb 23 03:24 error.log-20180224 -rw-r--r-- 1 root nginx 1.9M Mar 2 03:09 error.log-20180226 -rw-r--r-- 1 nginx nginx 205 Feb 26 03:31 error.log-20180227 -rw-r--r-- 1 nginx nginx 205 Feb 27 03:47 error.log-20180228 -rw-r--r-- 1 nginx nginx 207 Feb 28 03:28 error.log-20180301 -rw-r--r-- 1 root nginx 559K Mar 7 03:25 error.log-20180306 -rw-r--r-- 1 root nginx 760K Mar 17 04:12 error.log-20180315 -rw-r--r-- 1 nginx nginx 207 Mar 15 03:28 error.log-20180316 -rw-r--r-- 1 root nginx 374K Mar 20 03:42 error.log-20180318 -rw-r--r-- 1 nginx nginx 205 Mar 18 03:36 error.log-20180319 -rw-r--r-- 1 root nginx 115K Mar 30 03:13 error.log-20180329 -rw-r--r-- 1 root nginx 655K Apr 6 03:15 error.log-20180403 -rw-r--r-- 1 nginx nginx 207 Apr 3 03:14 error.log-20180404 -rw-r--r-- 1 nginx nginx 207 Apr 4 03:11 error.log-20180405 -rw-r--r-- 1 root nginx 240K Apr 10 03:07 error.log-20180409 -rw-r--r-- 1 root nginx 143K Apr 12 02:30 error.log-20180411 -rw-r--r-- 1 root nginx 620K Apr 16 03:15 error.log-20180415 -rw-r--r-- 1 root nginx 241K Apr 19 03:22 error.log-20180418 -rw-r--r-- 1 root nginx 418K Apr 25 03:39 error.log-20180423 -rw-r--r-- 1 nginx nginx 207 Apr 23 03:33 error.log-20180424 -rw-r--r-- 1 root nginx 5.0K Apr 26 03:06 error.log-20180426.gz -rw-r--r-- 1 root nginx 6.0K Apr 27 03:37 error.log-20180427.gz -rw-r--r-- 1 root nginx 48K Apr 28 03:26 error.log-20180428.gz -rw-r--r-- 1 root nginx 839K Apr 30 02:48 error.log-20180429 -rw-r--r-- 1 nginx nginx 181 Apr 30 03:17 error.log-20180430.gz -rw-r--r-- 1 root nginx 100K May 4 02:56 error.log-20180501 -rw-r--r-- 1 nginx nginx 207 May 1 03:08 error.log-20180502 -rw-r--r-- 1 nginx nginx 207 May 2 03:21 error.log-20180503 -rw-r--r-- 1 nginx nginx 183 May 4 03:18 error.log-20180504.gz -rw-r--r-- 1 root nginx 46K May 6 12:11 error.log-20180505 -rw-r--r-- 1 nginx nginx 207 May 5 04:49 error.log-20180506 -rw-r--r-- 1 nginx nginx 958 May 7 03:24 error.log-20180507.gz -rw-r--r-- 1 root nginx 1.6K May 8 03:30 error.log-20180508.gz -rw-r--r-- 1 root nginx 6.4K May 9 03:25 error.log-20180509.gz -rw-r--r-- 1 root nginx 141K May 12 01:32 error.log-20180510 -rw-r--r-- 1 nginx nginx 207 May 10 03:28 error.log-20180511 -rw-r--r-- 1 nginx nginx 183 May 12 03:16 error.log-20180512.gz -rw-r--r-- 1 root nginx 149K May 14 00:30 error.log-20180513 -rw-r--r-- 1 nginx nginx 2.6K May 14 03:09 error.log-20180514.gz -rw-r--r-- 1 root nginx 9.5M May 17 11:46 error.log-20180515 -rw-r--r-- 1 nginx nginx 207 May 15 03:22 error.log-20180516 -rw-r--r-- 1 nginx nginx 207 May 16 03:14 error.log-20180517 -rw-r--r-- 1 nginx nginx 453K May 18 08:58 error.log-20180518 -rw-r--r-- 1 nginx nginx 1.8M May 20 07:48 error.log-20180519 -rw-r--r-- 1 nginx nginx 205 May 19 03:35 error.log-20180520 -rw-r--r-- 1 nginx nginx 1.6M May 21 04:41 error.log-20180521 -rw-r--r-- 1 nginx nginx 4.1M May 23 07:54 error.log-20180522 -rw-r--r-- 1 nginx nginx 205 May 22 05:06 error.log-20180523 -rw-r--r-- 1 nginx nginx 1.7M May 25 03:03 error.log-20180524 -rw-r--r-- 1 nginx nginx 205 May 24 03:06 error.log-20180525 -rw-r--r-- 1 nginx nginx 789K May 26 08:43 error.log-20180526
あらら・・・圧縮されてないですね・・・
gzip
コマンドで圧縮します。
[root@ip-172-31-15-187 nginx]# gzip access.log-20180501 access.log-20180505 access.log-20180510 access.log-20180513 access.log-20180515 access.log-20180518 access.log-20180519 access.log-20180521 ...
こんな感じでファイルを圧縮していきます。圧縮したら、s3とかに移動しておくと良いですね。
そんな感じで、railsのログファイルもどうように圧縮、移動をすると、ディスク容量はだいぶ減るかと思います。
JavaScriptで実装したクリップボードへのコピー機能が動かなかった
はじめまして、PRESSでエンジニアとしてお手伝いをさせて貰っているyamane (id:yusukeyamane01)です Twitterもやっています。
JavaScriptで実装したクリップボードへ文字列をコピーする機能を修正した時の事を記事にしたいと思います。
コードが動かなかった理由
結論を先に言うと、CSSの指定が問題で処理が正しく実行できていませんでした。
修正する前はHTMLが以下のようになっていて
button.editor-btn{ onclick: "handleURLCopy();" } | プロフィールページのURLをコピー p#urlField style="visibility:hidden;position:absolute;" = current_url
JavaScriptが以下のようになっていました
handleURLCopy() { const target = document.getElementById('#urlField'); const range = document.createRange(); range.selectNodeContents(target); window.getSelection().removeAllRanges(); window.getSelection().addRange(range); document.execCommand('copy'); window.getSelection().removeAllRanges(); this.hideMenuModal() this.$notice.success('コピーしました'); }
上記のコードでは、HTMLのPタグ内にコピーしたいURLを持たせJavaScriptでPタグ内の文字列を選択状態にして、document.execCommand('copy');
でクリップボードへコピーしていました。
問題の原因となっていたのはHTMLにある以下の記述でした。
style="visibility: hidden;position:absolute;"
この記述はコピーしたい文字列をviewに表示させない為に記述していたのですが、visibility: hidden;
としてしまうと、対象の要素を選択状態にすることが出来ずに処理が正常に行われていませんでした。
どのように問題を解決したか
動かない原因が対象の文字列を選択出来なくしていたことだと判明したので、解決方法は次の二択だと考えました。
- visibility:hiddenではなく、opacity: 0;で文字列を隠蔽する
- HTMLにコピー対象を書き込むのでは無く、コピー対象の生成までをJavaScriptで処理する
今回は後者を選択しました。後者の方がより汎用性高く使い回せる関数になると考えたからです。修正後のコードは以下です。
button.editor-btn{ onclick: "handleURLCopy();" } | プロフィールページのURLをコピー
function handleURLCopy() { copyURLToClipboard(location.href) this.hideMenuModal() this.$notice.success('コピーしました'); } function copyURLToClipboard(string) { if (!document.queryCommandSupported('copy')) return new Error('このブラウザはクリップボードへのコピーに対応していません'); if (typeof string !== 'string') return new TypeError(`except string but got ${typeof string}`); // 仮想のdiv要素を作りそこに引数で受けた文字列を持たせる var tempElement = document.createElement('div'); tempElement.appendChild(document.createElement('pre')).textContent = string; // 仮想のdiv要素をviewに表示させないようにする tempElement.style.position = 'fixed'; tempElement.style.left = '-100%'; document.body.appendChild(tempElement); document.getSelection().selectAllChildren(tempElement); document.execCommand('copy'); document.body.removeChild(tempElement); }
これでクリップボードへのコピー関数は正常に動くようになりました。この記事が、同じような問題で困っている人の手助けになれば幸いです。