javaで正規表現

とあるコードが数字→英数字になる仕様変更に取り組んだときの、気づきと備忘録、その1。


チェック処理で正規表現を用いることになった。
java正規表現

SBクリエイティブ:体系的に学ぶ 安全なWebアプリケーションの作り方』を確認したところ、javaならmatchesメソッドが使える、とのこと。

matchesメソッド https://docs.oracle.com/javase/jp/6/api/java/lang/String.html#matches(java.lang.String)


"java 文字列 正規表現 チェック"でググって見つけた、以下の記事を参考にしながら、実装。
正規表現を使う - Javaちょこっとリファレンス
Javaで入力チェックを正規表現で行う - dirablueの日記
Javaで正規表現によるチェックについて - Java~PG CENTER(プログラムセンター)~


実装したものの、諸々の都合で、私はレビューにまわることに。
…で、上がってきた実装。

if(targetCode.matches("^[0-9a-zA-Z]{3}+$"))
{
	// 正規表現を満たしている場合の処理
} else {
	// 正規表現を満たしていない場合の処理
}

"+"なくてもいいのでは?と指摘したものの、修正されず。
のちの試験で問題も出てないので、まあいいか、と流す。

Eclipseのブレークポイントに条件を追加する

Eclipseデバッグを利用して、想定通りの判定処理になっているかどうか試験をしていた時のことです。
繰り返し処理中に何回も同じ値が出てくるため、次の該当値が出てくるまで何回もF8を押すのがダルくて、ラクできる方法を探そうと思い立ちました。
たまたま右クリックした時に出てきていた単語を絡めて、「Eclipse インスペクション」で検索したところ、下記のスライドを見つけました。

Eclipseデバッガを活用するための31のtips

P.69の「Q22.ある条件を満たす時、初めて止まるようにブレークポイントを貼るにはどうすればよいですか?」がまさに自分のやりたいことでした。

Eclipseを日本語化している場合は、下記の操作になります。

1. ブレークポイントを右クリック
2. 「ブレークポイント・プロパティー」を選択
3. 「条件付き」チェックボックスを選択
※「'true'の時に中断」ラジオボタンが選択されていることを確認
4. テキストエリアに条件を入力

targetStr.equals("ヒット")

5. 「OK」を選択

この例だと、targetStrが"ヒット"の場合だけ、ブレークポイントで処理が止まるようになります。

目視確認はザルになりがちだし、ミスってまた最初からも嫌だし…この設定のおかげで、試験の時短になりました。

フィンランドの国語教育すごいなあ

bookmeter.com

■なぜ読んだのか

新人SE向けの記事を読み漁っている中で、たどり着いた記事で紹介されていた、フィンランドの議論のルールに興味を持ったから。

 

たどり着いた記事

Adways Engineers' Blog : 新人後輩SEに業務に入る前に読んで欲しい記事 15選

 

紹介されていた記事

d.hatena.ne.jp

また、上下関係で下である自分の意見に聞く耳を持ってもらえず、ストレスともどかしさを感じており、なにか解決の糸口が掴めるのでは?と思ったから。

f:id:PET_HAL:20170610141147j:plain

▲自身のノートにはこのような嘆きが最近増えている

 

■読了にかかった期間・時間

1時間。届いた日に読了。

 

■備忘録

読了後、読んでよかったと思った。

練習してできるようになりたいことが、たくさん書かれていた。

実践してみたいことを書き出しておく。

 

□発想力のカルタ

それは何?

それで何をするの?

それはどんなもの?

中央のテーマは単語が実践しやすそう。

 

□表現力のカルタ

いつ?

どこで?

だれが?

何を?

なぜ?

どうやって?

それからどうなった?

こちらは中央は短文。創作などで使えそう。

 

□論理力

どうして?攻撃

池上彰氏の『伝える力』を思い出しました。日本銀行を社会の教科書を引用して説明すると、小さい子どもには伝わらず、素朴な疑問をぶつけられる、というお話。ここで「そういうものなんだよ」と言っちゃあ、おしまいだ…。

自分が疑問を持つことも大事だし、どうして?攻撃に筋の通った、納得のできる答えを返せるようになることも大事。

# 猫が好きなのはかわいいから→犬だってかわいいのにどうして猫?

 

意見+理由

意見

なぜなら(理由1)

それに(理由2)

また(理由3)

3つの理由がただの言い換えにならないように気をつけること。

理由を3つ述べて意見で殴れ。

 

□批判的思考力

いいところと悪いところを10個ずつ挙げる

悪いところだけを挙げるメソッドだったが、生徒が悪いところだけを挙げるのはいやだと言うのでいいところも挙げるようになったそうだ。見習いたい。

 

□コミュニケーション力

議論のルール。…は、すでにまとめてある記事も紹介したので、私が気になった点のみ、備忘録を残しておく。

 

1. 他人の発言をさえぎらない。

他人の発言中に勝手にしゃべりださない。例え発言中の人の意見がふざけていようが、途中でしゃべりだした人がルール違反。自分の発言の価値(と表現して伝わるのだろうか)を下げないためにも、大事なことかも。

 

6. 話を聞くときはほかのことをしない。

P.69のイラストでいうと、寝ている生徒がこのルールを違反しているということだろう。

 

8. 議論が台無しになるようなことを言わない。

【本書より引用】(前提に立ち返ると、他の人の気づかなかった論点を示したように見えるので、優越感に浸れるのです。)

突き刺さる一文。「そもそも」を禁止しようと思った。

 

10. 議論が終わったら、議論の内容の話はしない。

蒸し返して喧嘩になることがあり、ルール化されたそうだ。


本書を読んでいると、先生が生徒の提案でルールを改良しているようで、そういう受容性のある雰囲気も素晴らしいなあと思った。

『リーダブルコード』を読んで、備忘録

www.oreilly.co.jp

■なぜ読んだのか

試験要員化していた私に、コーディングの機会が巡ってくることになったから。

# 読みかけの本に飽きてきたから、という理由もある

 

■読了にかかった期間・時間

累計3時間くらい。

5/23-6/4の13日間のうち、7日着手。

 

■備忘録

本書における「リーダブルコード」「より良いコード」の定義は、「第三者が理解するまでにかかる時間が短いコード」であることを、まずはおさえておきたい。
そして、「第三者」には、未来の自分も含まれている。

 

とりあえず、これなら今の自分でも心がけ次第でできそうだと思ったことを抜き出しておく。

・【P.14】ループで使う変数に説明的な名前をつける
  (例:i,j,k→ci,mi,ui)

・【P.20】変数に単位を含める
  (例:start→start_ms)

・【P.21】変数に属性を含める
  (例:html→html_utf8)

・【P.31】限界値の変数の接頭にmin_,max_をつける

・【P.32】以上以下の範囲を表す変数の接頭にfirst_,last_をつける

・【P.33】以上未満の範囲を表す変数の接頭にbegin_,end_をつける

・【P.77】名前付き引数っぽいコメントをつける
  (例:checkRange(/* first_index = */ 1, /* last_index = */ 10))

・【P.84】条件式の左側には調査対象、右側には比較対象
  (例:if(first_index >= 1))

・【P.91】関数から早く返す
# 関数の複数returnを許容しないのはアホくさいらしい。
# …が、ここは賛否が分かれそうな気がした

・【P.124】変数の変更箇所を少なくする
  (現在値の判断が難しくなるのを避けるため)

・【P.127】標準のライブラリを利用する
  (時間の節約になり、書くコードも少なくなる)
# 確かにこれは忘れがちだなと思った

・【P.229】1回のコミットにつき変更内容はひとつ
  (例:1回目のコミット→コメント整形、2回目のコミット→今回の改修)
# コメント整形と今回の改修両方ぶち込んだらdiffとりにくいよな~と思って
# コメント整形しなかったことがあったんだけど
# こうすれば良かったんだ!と気づかせてもらった

 

過去のコメントがコードをただ日本語化しただけになってて、本書で書かれていた意味のないコメントだなって凹んだけど、これから気をつけたらいいよね!

なんちゃらMap

なんちゃらMap系のコードをいじるのでメモ。

 

■追加する場合

HashMap:バラバラ

TreeMap:キーでソート

LinkedHashMap:追加された順

HashMap、TreeMap、LinkedHashMapの違いとLRU | infoScoop開発者ブログより

(ググったワード:"treemap linkedhashmap")

 

■ループ

LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();

for(Map.Entry<String,String> entry : map.entrySet()){
          // entry.getKey()
          // entry.getValue()
}

[java][基本] HashMap、HashSet、ArrayListのループ処理サンプル | keiのTECブログより

(ググったワード:"linkedhashmap ループ")

 

以下、6/27追記。

keyをIntegerからStringに変更したら、今までparseIntで同じkey扱いだった"01"と"1"が別keyとなっていた。

なんでかな…と調べたところ、重複したkeyで新たにputすると、valueは新しいものに置換される、とのこと。

Mapに重複したキー値を追加した場合 - 裏ブログより

(ググったワード:"treemap キー 重複")

APIの仕様にも書いてありました。

Map (Java Platform SE 6)

つまり、今までは新しいvalueで置換していたということか。
従来の処理と異なるので、確認事案でした。

Excelのデータに重複がないか確認する

Excelのデータに重複がないか確認する方法を調べて試した時の備忘録。

Excelでコード採番したものの、コードが飛んでいる箇所があり、目視での確認は難しい。
前日作業して一晩おいて翌朝セルフチェックしようと思っていたのに、がっつり睡眠時間を削ってしまい、朝から頭はまわらない。
じゃあもうExcel(システム)にしてもらった方が確実だよね、なにか方法はないかな。
…ということで「エクセル 重複 チェック」でググって下記のWebページを発見。

www.becoolusers.com

重複チェックするセルを範囲選択

ホーム > スタイル > 条件付き書式 > セルの強調表示ルール > 重複する値
OK

あとは色フィルターでコードが重複していないか確認すればOK。
採番コードに重複が見つかったので、コードを採番し直しました。
早く気づけてよかった…。

社会人最初の3年がもうすぐ終わるので振り返ってみる

私は3年前、消費税が5%から8%になるのと同時に社会人デビューした。
社会人4年目を迎える前に、最初の3年間を振り返ってみようと思う。

 

■仕事をしてきて思ったこと
・基本は大事
定刻までには出社しておく、明るく元気な挨拶をする、お礼・謝罪を述べる…など基本は確実にできるようにしておくに越したことはない。

報連相は大事
まずは報連相をする癖をつける。
遅いよりは速く。するべきか否か悩むくらいならしてしまう。必要な情報か判断するのは相手。
数をこなせば「こうすべきかな」「こうした方がよかったかな」が見えてきて質も上がる。

・期限確認は大事
何か依頼された時は期限を確認する癖をつける。

 ・ログは残した方がよい
人間は忘れる生き物である。
電話のやり取りはメールに書き起こして送信する、口頭会話で決まったことや確認したことはメールやメッセージに書き起こして送信する。
後から検索して見つけることができるようにログを残し、言った言わなかった問題、あの時結局どういう結論になったんでしたっけ?問題を回避する。

・振り返って覚える
入社すると社内ルール、雑用、業務の進め方、案件ルール、案件用語など、覚えることが目白押し。
ノートはメモまみれでどこに何が書かれているのか分からなかった。
そこで、週末はノートを確認し、今後も必要そうな内容はふせんに書いてまとめ直してた。
この行動のおかげもあって、「覚えがよくて理解の早い新人」の印象を手に入れたと思っている。
ただ、まとめるなら業務で使用しているPCにも電子ファイルとして残した方がよかったかもしれない。
# 知らない間にふせんが剥がれ落ちてしまい、まとめ直した内容が分からなくなってしまった
# 検索性が悪い
今後のためにも改めて電子ファイルにまとめ直しておこうかな…。

・嫌われるより好かれた方がよい
媚ではない。
嫌われていなかったおかげで仕事がしやすかったな、と思った場面が多々あった。
信頼関係を築いておくに越したことはない。

・○○さんのトリセツをつくる
例えば、Aさんは電話やメールよりも直接会って伝えることを好むとか、Bさんは業務時間外に報連相することを嫌っているとか。
でもCさんは用があれば昼休みでも遠慮なしに質問してくるんだよな~とか人それぞれの価値観、都合、拘りやマイルールがあるので、それをどんどんトリセツとしてたくわえておく。
あと、自分についても理解してもらっておくとよい。
# これからもどうぞよろしくね

・仕事上のコミュニケーションで必要な力は【伝える力・質問力・理解力・要約力】
相手の説明を聞く → 不明点を質問する → 質問の答えを踏まえて自分の言葉で簡潔にまとめる → 問題なし(≒理解できている) → 第三者に説明できる(しかもわかりやすい)
これが口頭ベースでも書き言葉ベースでもできる人は仕事上のコミュニケーションができる人だと思う。
# この力のあるなしは年齢によらない。できる人はできてるし、できてない人はできてない

・敬語は難しい
お客様宛にメールを書くことが増えてから敬語に詰まることが多くなった。
正しい敬語表現を知りたくてググっても正反対の内容のWebページが上位に表示されていることもしばしば。
数冊本買って勉強が必要かも…。

 

■プライベート・生活習慣の出来事・始めたこと・変わったこと
基本情報技術者試験に合格した
入社した年の春に合格した。大学時代にも何回か受験していて、ようやく。

・勉強会に参加し始めた
臆病者なので懇親会参加したりLTしたりはしないけど、発表を聞くだけでも自分の知らなかったことを知ることができて刺激になる。
勉強会の情報収集にはconnpassdotsからの通知メール、各地方のIT勉強会カレンダーを利用している。

twitterを始めた
勉強会に参加してる時につぶやいたり、気になる記事をつぶやいたり、が主な用途。
勉強会参加後にはtogetterで勉強会中のつぶやきをまとめるようにしている。

・ビジネス書・技術書を読み始めた
ビジネス書は栄養ドリンク。前向きになれるし背中を押してくれるから、私のようなネガティブ思考の人間にはありがたい。
技術書は仕事で必要に迫られたり基礎知識不足を感じたりしたら一気に取り組む程度。

読書メーターを始めた
もともと趣味用のアカウントで読んだ漫画・小説の管理に使っているので、こちらではビジネス書・技術書に特化するつもりで使用を開始。
本の管理には欠かせない存在。

ブログを始めた
きっかけは『SOFT SKILLS』を読んだこと。
趣味のアカウントでも始めた。
まずはアウトプットの数や量を増やすところから。

・3か月に1回歯科健診を受けるようになった
詳細は以前投稿した記事にて。

・ブラックコーヒーを飲むようにした
学生時代は砂糖・ミルク入りのペットボトルコーヒーが好きだった。
しかし、水分補給のごとく飲むコーヒーでそれは…と思い、ブラックコーヒーに変えた。
ブラック以外の市販コーヒーは砂糖やミルクが大量に入ってることに気づいた。

・体重が5kg減った
残業で帰りが遅く、寝る前に食べるのもなあ…と晩ご飯を食べない生活を続けた結果、1年で体重が4kg減った。
そんなことがあったので、2年目からは定時には晩ご飯を食べるようにした。空腹でお腹を鳴らしながら残業するよりマシだろう…といったところ。
それでも2年で体重が5kg減った。これはおそらく2年目からACゲームで運動をする習慣ができたからだと思う(後述)。

・ACゲームにハマった
社会人2年目からとあるACゲームにハマっている。これが身体を動かすゲームで、運動不足解消になっている。身体を動かして汗をかくの楽しい。

・アニメを見なくなった
学生時代、週に4-5作品くらい見ていたのが嘘のようにアニメを見なくなった。
録画するといつでも見れると思ってどんどんたまるから最終的に容量確保のために削除。配信サイトにしても無料期間で視聴できず。
社会人になってから全話見たアニメは、どれも深夜リアタイで視聴してた。1週間にひとつ楽しみができたのは良かった。しかし、睡眠不足が翌日に響くのは大ダメージだった。
今では新アニメの情報すらチェックしなくなった。

・企業・企業人番組を見るようになった
「がっちりマンデー!!」「ガイアの夜明け」「カンブリア宮殿」「プロフェッショナル」「情熱大陸」を見るようになった。
いろんな企業の取り組みや企業人の考え方を知ると刺激になる。

 

■今後の課題
・睡眠
うじうじ悩んだり、だらだらスマホいじったりしていると、就寝が遅くなってしまう。
寝坊による遅刻はしていないが、翌日の日中は眠くて仕方ない。
睡眠時間6時間切りを3日続けるとガタがくるとか、寝不足が続くと足をつるとか、不調のラインとサインは把握している。
が、肝心の改善はできていない。

スキルアップ
同じ案件にとどまり続けていて案件も保守だから、仕事ではその機会が得られず。
今後を見据えると、自主的なスキルアップに取り組まないとまずいかな、と思いつつ。
分からない、できないことがたくさんあって、挫折、続かないばかりで。
今は応用情報技術者試験勉強中。
試験が終わったら、前々からぼやいている「音ゲースコア管理で何かしら作る」に取り組もうと思ってはいる。
# 趣味と絡める作戦

・目標
目標がないから心配や不安がつきまとって悩んだり思いつめたりしちゃうんだよね。
一本芯を通したいところだけど…。

 

4月から社会人4年目かあ…今までのスタンスじゃ通用しなくなるんだろうなあ…やっていけるんかなあ…