yujiroのプログラミング

勉強内容をアウトプットし、サボらないようにする為のブログ

CNAMEについて

f:id:yujiro0320:20200128113133j:plain

はじめに

Cnameについての概念と理解を深めるためのアウトプットをする

意味

CNAMEレコードは正規ホスト名に対する別名を定義するレコードです。
特定のホスト名を別のドメイン名に転送する時などに利用します。
別名は「エイリアス」(alias)と呼ばれる。

  • 正規ホスト名はAレコードが登録されている必要があります。
  • 特定のファイルやサブディレクトリを指定する事はできません。
  • ホスト名なしのCNAMEレコードは登録することができません。

CNAMENを使うと変更の手間が省ける

IPアドレスが変更になるとき、CNAMEを使っていると手間を軽減させることができます。

少しわかりにくいので例をあげて説明します。次の5つのレコードを登録したい時を考えてみます。

www1.server-99.com A 192.168.10.102
www2.server-99.com A 192.168.10.102
www3.server-99.com A 192.168.10.102
www4.server-99.com A 192.168.10.102
www5.server-99.com A 192.168.10.102
その場合、www1~www5まで5つのレコードを登録する必要があります。

5つ全てをAレコードで登録する場合どうでしょう?5つのサブドメインに同じIPアドレスを登録していきます。もし、IPアドレスが変更になった場合、5つのレコード全てを変更して上げる必要があります。とても面倒ですね。

CNAMEを使うと変更するレコードを1つにすることができます。

www1.server-99.com A 192.168.10.102
www2.server-99.com CNAME www1.server-99.com
www3.server-99.com CNAME www1.server-99.com
www4.server-99.com CNAME www1.server-99.com
www5.server-99.com CNAME www1.server-99.com

GitHubDeskTop コンフリクト時の処理

はじめに

このようなブランチ構成である。

f:id:yujiro0320:20200214164746p:plain

devlopブランチではhtmlファイルが以下の状態である

<h1>Tomさん</h1>
<p>こんにちは</p>


開発ブランチ_1にて以下のような編集を行う

<h1>Tomさん</h1>
<p>おはようございます</p>

開発ブランチ_2にて以下のような編集を行う

<h1>Tomさん</h1>
<p>こんばんわ</p>


devlopにマージする順番は開発ブランチ_1が最初である。

手順1

ブランチの切り方
マスターからブランチを切っているのでなく、devlopブランチから開発ブランチ_1及開発ブランチ_2を作成する。
写真の通りに作成する。
f:id:yujiro0320:20200214165736p:plain

手順2

開発ブランチ_1で内容を変更し、コミットしプッシュする。
f:id:yujiro0320:20200214165940p:plain

リモートリポジトリでマージする。
マージ先はmasterでなくてdevlopである。

f:id:yujiro0320:20200214170130p:plain

手順3

devlopブランチに切り替えをする。
リモートのdevlopの環境とローカルの環境を同期するためにプルを行う

f:id:yujiro0320:20200214170254p:plain

手順4

開発ブランチ_2にてファイルを編集する。
f:id:yujiro0320:20200214170417p:plain

コミットし、マージする。
すると、コンフリクトが発生する。
f:id:yujiro0320:20200214170610p:plain

githubdesktopに戻り、以下の画面をクリックする
f:id:yujiro0320:20200214170719p:plain

devlopを選択するとコンフリクトが発生との画面になる。

f:id:yujiro0320:20200214170816p:plain

エディタを覗くと写真の画面になっている。
あとはどのように編集するかを決める。
f:id:yujiro0320:20200214170911p:plain

編集終わりコンフリクトが解消となれば、図のようになる

f:id:yujiro0320:20200214171005p:plain

Salesforce ant インストールから使い方まで

f:id:yujiro0320:20200128113133j:plain

はじめに

javaをインストールできている。私の環境ではこのようなバージョンのjavaが入っている

openjdk version "13.0.1" 2019-10-15
OpenJDK Runtime Environment Zulu13.28+11-CA (build 13.0.1+10-MTS)
OpenJDK 64-Bit Server VM Zulu13.28+11-CA (build 13.0.1+10-MTS, mixed mode, sharing)

手順1(antのインストール)

developer.salesforce.com
上記サイトを基に説明していく。まずantをインストールする。
Apache Ant - Binary Distributions

f:id:yujiro0320:20200213122247p:plain
ダウンロードするのはZipファイルでバージョンはどちらでも良い

手順2(antのインストール)

ダウンロードしたZIPファイルを解凍する。デスクトップに置いていても良いが、/usr/local/binに移動させるのが一般的。図ではfinderのGUIを用いてファイルを移動させた。CUIで移動できるならそっちの方が早い。
f:id:yujiro0320:20200213123446p:plain

手順3(antのインストール)

次に保存したフォルダにパスを通す必要がある。環境変数にパスを記載して通す。.bash_profileファイルを作成する必要があります。
.bash_profileファイルはホームディレクトリに存在。

|--home

f:id:yujiro0320:20200213140349p:plain
隠しファイルが見えない状態になっている場合は以下のサイトから表示させるようにコマンドを入力しておく。【Mac】隠しファイル・隠しフォルダを表示する方法 - Qiita
.bash.profileファイルに以下を記載する

ANT_HOME=/usr/local/bin/apache-ant-1.9.14 ←※保存しているversionによって記載は異なる
export PATH=$ANT_HOME/bin:$PATH

さらに、このコマンド

source ~/.bash_profile

上記コマンドで読み込みをしてくれる。
antツールが正しく読み込まれているかを確認するために、以下コマンドを入力。

ant -version
 

インストールできていればバージョンが表示。

Apache Ant(TM) version 1.9.14 compiled on March 12 2019

手順4(antインストール後の設定)

Ant移行ツールをダウンロードする。
Salesforce Developers
ZIPファイルを解凍すると図のようなファイルが入っている。
f:id:yujiro0320:20200213125022p:plain
このうちsampleは資源を環境からデプロイまたは、ダウンロードする際に使用するために、デスクトップにおいておく。
ant-salesforce.jarは保存するディレクトリを変更しないといけない。
ここに保存

|--usr
    |--local
        |--bin
            |--apache-ant-1.9.14
                |--lib
                    |--ant-salesforce.jar ←ここに保存

写真でも見せておく。
apache-ant.1.9.14(ダウンロードするバージョンによってフォルダ名は異なる)以下のlibフォルダ
f:id:yujiro0320:20200213131516p:plain
これで準備は完了である。

手順5(リトリーブの方法)

sampleフォルダを使用してsalesforceの環境からデータを引っ張っていく。
図を参考にしてbilud.propertiesの記述を変更する。どの組織に繋ぐのかを記載。ログインURLに注意。サンドボックスならtestとなる。
f:id:yujiro0320:20200213132756p:plain

手順6(リトリーブの方法)

環境から資源をダウンロードするのはフォルダはretrieveUnpackagedがデフォルトでなっている。
手順はコード化されておりSAMPLEフォルダ直下にあるbuild.xmlに記載がある。
下記コードはSFDC環境から資源をダウンロードするretrieveUnpackagedの記述。詳しく見てみる

  <target name="retrieveUnpackaged">
      <mkdir dir="retrieveUnpackaged"/>
      <!-- Retrieve the contents into another directory -->
      <sf:retrieve username="${sf.username}" password="${sf.password}" sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" retrieveTarget="retrieveUnpackaged" unpackaged="unpackaged/package.xml"/>
    </target>

unpackaged="unpackaged/package.xml"と記載ある。
記載の通りunpackagedフォルダのpackage.xmlを覗いてみる。

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>*</members>
        <name>ApexClass</name>
    </types>
    <types>
        <members>*</members>
        <name>ApexTrigger</name>
    </types>
    <version>47.0</version>
</Package>

ここで記述されているのは2点。ApexClassとApexTriggerの全てを対象とする
何の資源をダウンロードしたいのかを明確にするのはこの場所である。
例えばライトニングコンポーメントの資源を全てダウンロードしたいとなれば以下の記述になる。

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>*</members>
        <name>ApexClass</name>
    </types>
    <types>
        <members>*</members>
        <name>ApexTrigger</name>
    </types>
    <types>
		<members>*</members>
		<name>AuraDefinitionBundle</name>
	</types>
    <version>47.0</version>
</Package>

少し話は戻り、build.xmlをもう一度見てみる。

retrieveTarget="retrieveUnpackaged"

と記載がある。ここにデータを吐き出すよって意味の記載。追加したライトニングコンポーメントはこのディレクトリ以下に溜まっていく。
実際に実行してみる。ターミナルからディレクトリをSAMPLEフォルダまで移動

cd desktop
cd sample

コマンドを以下入力

ant retrieveUnpackaged

これでretrieveUnpackagedフォルダに指定した資源をダウンロードできるようになる。

f:id:yujiro0320:20200213141705p:plain
auraってフォルダが増えてその中に資源が入っている
続いてデプロイについて記述していく。

手順7(デプロイ の方法)

資源をデプロイする方法について記述してみる。
build.xmlファイルをみる。
デプロイにかかる記述はdeployCodeに記載がある。
そのコードを詳しく見てみる。

<target name="deployCode">
      <!-- Upload the contents of the "codepkg" directory, running the tests for just 1 class -->
      <sf:deploy username="${sf.username}" password="${sf.password}" sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" deployRoot="codepkg" testLevel="RunSpecifiedTests" rollbackOnError="true">
         <runTest>SampleDeployClass</runTest> 
      </sf:deploy>
    </target>

記載が長いので以下に大事な部分を抜粋。

  <runTest>SampleDeployClass</runTest> は実行するテスト(資源)を指定している

本番環境ではテスト実行は必須だが、開発環境をまたぐ時にわざわざ実行するのも面倒なので

<target name="deployCode">
      testLevel="NotestRun" >
    </target>

に設定すればテストクラスをデプロイ する必要はない。
deployRoot="codepkg" となっているため、codepkgフォルダを覗きにいく
こんなディレクトリ構造になっている。

|--codepkg
    |--classes
    |--triggers
    |--package.xml

先ほどの資源ダウンロード同じように、上記ディレクトリにデプロイしたい資源を入れて送る。
送る内容はpackage.xmlにて記載する。

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>SampleDeployClass</members>
        <members>SampleFailingTestClass</members>
        <name>ApexClass</name>
    </types>
    <types>
        <members>SampleAccountTrigger</members>
        <name>ApexTrigger</name>
    </types>
    <version>47.0</version>
</Package>

ここからライトニングコンポーネントを送るように指定するにはこのような書き方になる。

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">

    <types>
        <members>test_kawa</members>
        <name>AuraDefinitionBundle</name>
    </types>
    <version>47.0</version>
</Package>

test_kawaというコンポーネントを追加した。
f:id:yujiro0320:20200217140028p:plain
この場合はコンポーネント単位(フォルダ)
コンポーネントの中身のjsファイル、cssファイルのみなども遅れるとおもうがまだ調べられていない。

|--codepkg
    |--aura
    |--classes
    |--triggers
    |--package.xml

auraに送りたい資源をいれる。
送りたい資源のみをフォルダにいれる。今回はclasses,tirggersは送らないので空にする。
あとは、コマンドを実行する。

ant deployCode

1年間プログラミングを勉強して振り返り

f:id:yujiro0320:20190911192439j:plain

はじめに

ツイッターで学習報告を初めて1年経ちましたので、現状の振り返ります。これからプログラミング学習を始める人の参考に少しでもなればと思い記事を書いています。

簡単に自己紹介

今何しているのってツッコミが入りそうなので簡単に自己紹介をします。
僕は無事エンジニアとして就職する事が出来ました。
Salesforceプラットフォームをベースにクラウドシステムの開発を受託開発企業で働いています。
いわゆる受託開発のエンジニアをしています。
Salesforceって知らない人も多いと思いますが、Heroku( クラウド・アプリケーション・プラットフォーム)を買収した会社です。(でかい会社なのよ)
f:id:yujiro0320:20200124173419p:plain
受託開発以外にも自社製品も持っていてサブスクサービスを提供していたりとエンジニアとしては良い環境の会社に潜り込めたと感じています。
そんな僕ですがこのまま業務経験を積んでエンジニアとして生きていくキャリアを描いてるのでなく最終的にはBA(ビジネスアナリスト)/PMとしてキャリアを歩みたいと思っております。

なんでプログラミング始めたのか?

プログラミングを始めたきっかけは、前職のシステムがポンコツであったのがきっかけでした。
500名ほどの企業で営業職として働いていました。
基幹システムは全て自社で構築していました。変化の激しいIT業界の流れについていけずゴリゴリレガシーな基幹システムを使って商談管理や進捗管理などをしておりました。
アプリケーション間のデータリレーションがうまくとれず、現場のセールスとしては見たいデータが見れない&取れない状態でしたので、データExcelに出力し自身で加工しなればならず。本来注力すべき営業活動以外にかなり工数を取られていました。おかげで、Excelはある程度できるレベルになったのですが(笑)当時感じていた事は、とにかく無駄が多い。システムを変えるだけでかなり効率を上げることができるとの思いでした。
その頃から根本的にシステムを改善できるスキルを身に付けたいと思いプログラミングに興味を持ちました。

基幹システムを構築する会社→WEB系企業を目指す

基幹システムの開発あたりでググると、SES会社の募集は腐るほどありました。ただ、せっかく新たなチャレンジをする時にモダンないけてる会社で働きたいって思いがかなり強かったです。
ざっくりこんな会社では働きたくなかったです。

(1) スーツ着て出社
(2) フレックス導入してない
(3) リモートワーク不可
(4) 朝礼とか掃除当番がある

SESの会社で上記を満たす企業は僕の観測範囲ではありませんでした。
なので、基幹システムの構築をしている会社から、業務フローを簡素化できるシステム(saas)を提供している会社に軸を変更しました。

プログラミングの勉強ついて

駆け出しエンジニアの鉄板であるprogateから勉強を始めました。
そのあとの流れは以下の通りです。
progate→個人販売のプログラミング教材→プログラミングスクール
スクールに通っていた期間が一番伸びました。
理由は単純に、学習にコミットしていたからです。
ただスクールに関しては個人で学習管理できる人は本当に行く必要はないと思います。
教材が他と差別化できているかというとそうでもありませんでした。ただ、自身で勉強するだけだと共同開発の経験が出来ません。gitでバージョン管理とか経験しないと理解進まないし、gitに草はやす意味も分かりません。スクール以外で共同開発を経験するには以下サイトなんかで探したりすれば良いと思います。
menta.work
共同開発は、とにかくコミュニティを見つけてそこに飛び込めばいくらでも体験する機会はあると思います。共同開発を経験するためにわざわざスクールに行く必要はないと思います。
もちろん金銭的に余裕があればスクールでも良いと思います。自分で動かなくてもパッケージで準備してくれているので楽です。
スクールは高額支払う分どうしても期待値上がりますが、上げすぎると満足感は得られないと思います。(あくまで個人の感想です)

就職までの道のり

プログラミングを始めてから、就職までの工程は以下の通りです。

日付 行動 備考
2018-6 MACBOOKPRO15インチを買う エンジニアの転職を意識した瞬間
2018-7 progateに登録 この頃に登録したけど結局ほとんどせず。4ヶ月かけてhtmlコースを学習する笑
2019-1 本格的に学習の開始 Twitter配信開始
2019-2 会社に退職願を提出 受理後退職届提出
2019-2 個人販売のプログラミング学習教材を購入 教材見れる&質問できる&転職完了まで資料が使える。最高!と思い購入しました。6万払いましたがクソすぎた笑
2019-3 3月末最終出社 その後有給消化
2019-4 プログラミングスクール 4月末~7月上旬まで
2019-7 スクール卒業 なんだかんだ600時間は学習した
2019-7 1社内定 スクールからの紹介企業に内定。あまりにもすぐ決まりすぎて驚く。ただ第一志望の会社があったため内定辞退。
2019-8 ポートフォリオ作成 100時間かけて個人で作成
2019-9 転職活動 1ヶ月で15社程度応募した
2019-10 内定 10月上旬に内定。結果2社内定だった

新卒の時は面接緊張しましたが、7年そこそこ頑張って営業していたのもあり、面接は思ったほど苦労しませんでした。
今はエンジニアとして働いているので断言できますが、エンジニアはコミュ障が多いです。笑(営業職とくらべ)
その傾向もあってか、エンジニア志望で的確に志望理由や将来のキャリアについて話すと印象が良いイメージでした。

金銭的な準備

就職までの道のりとは他に参考になればと思い記載しておきます。
というのもチャレンジするのは大切ですが、お金もある程度あった方が精神的に余裕が保てるからです。
事前に僕は100万は生活費に充てるお金としてストックしていました。

日付 収支について 備考
2019-5 会社の給与支払い最終月 有給消化で5月まで在籍
2019-6 退職金 退職金支給
2019-6 失業申請 申請して3ヶ月の猶予期間ある
2019-6 妻の扶養家族になる 結婚している特権。毎月かかる税金が免除
2019-7 夏のボーナス支給 退職日後が支給日なのに振り込みがあった。最高
2019-8 無収入
2019-9 無収入
2019-10 失業保険 14日分だったかな
2019-11 再就職先会社から給与 再就職手当申請
2019-12 給与&再就職手当 申請から振込まで1ヶ月

無収入でも半年は暮らせる程度もお金があれば十分だと思います。精神的に楽でした。

プログラミングの勉強を始めてからの心境の変化

元々エンジニアとしての専門性を高めたキャリアを想像していましたが、ハイスペックエンジニアのレベルの高さに圧倒されたのと,20代後半からそのフィールドでチャレンジするのはリスクが高いなと思い始めました。
また面接を通じて多くの企業から提案されたのが、将来的にPM/BIとしてのキャリアが良いのではとの事でした。
僕の今までのキャリアを活かしながらIT業界で生き残って行くには最前だと自分でも思うようになり目指すキャリアをチェンジする事にしました。
正直、上流のコンサル(課題の抽出ー要件定義など)ができる人材の方が給与が良いです。
そんなお金の要素もありパタンと思考を切り替えました笑

これから勉強を始める人へ

コミュニケーションに自身がある人又は能力が高い人

プログラマーよりITコンサルや、PMを目指す道をオススメします。特に営業職経験者はこの道を進むのがベターと思います。プログラミングのスキルはあって越した事はないしなんだかんだ求められるので勉強は必要です。

コミュニケーションに自身ない

言い方悪いですがコミュ障でもお金を稼ぐ事のできる仕事だと思います(他の職種と比較し)。実際社内でもくそ絡みづらいけどかなり稼いでいるエンジニアは何人もいます。
ただ、学習習慣は必須ですし、勉強を続ける事ができる人でないと実現できないと感じます。

フリーランスエンジニアを目指している人

とにかく最速でなるのであれば、モダンな技術があーだこーだでなく、フロントのコーディングができ、ワードプレスいじれるかだと思います。
よく個人で教材販売している人の内容見れば、半年でフリーランス的なやつは、最終GOALはワードプレス案件の獲得な気がします。エンジニア的にはダサい仕事でそんな稼げないって言われてる。
地に足固めて技術を身につけていく覚悟がある方はかなりいばら道になると意識して下さい。
未経験者が20代後半からチンタラやって慣れる世界ではないと思います。あと、賢いやつは賢いです。頭の回転が速い。偏差値50以下(国語、英語、数学)の人は相当ハンデキャップあると考えて下さい。学歴不要=馬鹿でもできるわけではありません。

最後に

プログラマーなりフリーランスで稼ぐキャリアも素敵です。個人の時代と言われているからこそ意識してしまうと思います。ただなにをするにも自分がどうありたいのかを明確にイメージする事は大切です。
僕はキャリアを軌道修正できたのでモチベーション高く仕事に取り組めています。
他の方の参考になればと思います。