Skip to content
This repository was archived by the owner on Jan 4, 2024. It is now read-only.

Commit b5365bb

Browse files
Updated by qiita-cli
1 parent 76bb66d commit b5365bb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+6790
-0
lines changed

public/04a90724b949b0878561.md

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
---
2+
title: 私の転職エントリー
3+
tags:
4+
- 転職
5+
- 転職活動
6+
private: false
7+
updated_at: '2022-12-22T07:01:12+09:00'
8+
id: 04a90724b949b0878561
9+
organization_url_name: null
10+
slide: false
11+
---
12+
# プロローグ
13+
2022年10月末日に2年半いた会社を退職し、2022年11月より CyberAgent にジョインしました。
14+
15+
https://www.cyberagent.co.jp
16+
17+
今回は、そんな私の転職エントリーを書きます。
18+
19+
### 書くこと
20+
21+
- 転職の経緯
22+
- 転職活動でやったこと
23+
- 転職が決まってからやったこと
24+
- 転職してどうだったか
25+
26+
### 書かないこと
27+
28+
- 前職・現職がどんな会社か
29+
- 業務内容
30+
31+
# 転職の経緯
32+
**転職エージェントの方から声をかけていただいたこと** がきっかけでした。
33+
34+
私はもともと **「いま」転職をするつもりはありませんでした**。当時の業務や責務に特段不満があったわけではなかったですし、待遇にも概ね満足していました。ただ一方で、「いつか」は転職するのだろうと漠然と思っていました。
35+
その「いつか」が「いま」になったのが転職エージェントの方の働きかけによるものでした。
36+
37+
具体的には、私のメールアドレス宛に私の GitHub や登壇歴、ブログ記事を拝見したことに加え、フラットに面談をしたい旨が記されていました。ダイレクトスカウトみたいな感じでしょうか。
38+
(一瞬怪しさを感じつつも)話を聞くのはタダですし、オンラインならカジュアルに話が聞けるかなと思い面談をしていただくことにしました。
39+
40+
### 転職エージェントの方との面談内容
41+
いきなり興味のない会社を紹介されるのかな。と身構えていたのですが、初回1時間は私が目指している将来像とその理由、現状とギャップなど **1on1 のような形式** でした。キャリアステップと会社選びの軸を、上手く+親身に言語化していただいた印象が残っています。
42+
43+
私はフルスタックエンジニアになることを目指しており前職でもそれが実現できる技術スタック・人的環境であること。一方でチームが大きく個人の裁量が機能に依っているように感じられるのがジレンマであること。
44+
これを踏まえ、小規模で全領域を手掛けられるサービス・企業があればより高速にフルスタックエンジニアへの道を歩めることが軸となりました。
45+
46+
正直に転職に対する温度感をお伝えしたうえで、その後どのように進めるか / 進めないのかを相談していただけたのもよい印象でした。
47+
48+
結果として転職エージェントの方から声をかけていただいたことがきっかけとなり、**「いつか」の転職に備えた情報収集** のつもりで転職活動を始めることとなりました。
49+
50+
# 転職活動でやったこと
51+
紹介された企業を取捨選択し、**カジュアル面談→(興味のある会社は)面接** を受けていきました。はい、特段物珍しいことはしていません。
52+
53+
上で決めた転職の軸をもとに数社企業を選択していただき、面談するかを決めたうえでスケジュール調整まで転職エージェントの方にしていただきました。
54+
実際に **カジュアル面談を受けた企業は 10 社、面接を受けたのは 3 社ほど** だったと記憶しています。期間にして **2か月ほど** でした。
55+
56+
面談・面接時期を合わせてもう少し多くの企業の選考を進めるべきところですが、温度感が低いこともありやや消極的な転職活動だったと思います。
57+
とは言え、闇雲に選考を受けていたわけではないですし、後悔はしていないです。
58+
59+
# 転職が決まってからやったこと
60+
現職の CyberAgent から **内定が出てから転職をするのか否か天秤をかけました**
61+
そして、退職を決意してから前職に対して **退職交渉+業務引継ぎ** を行いました。(個人差はありますが、この退職の手続きが一番大変でした。)
62+
63+
時系列としては・・・現職の CyberAgent から内定が出たのが7月頭ごろ、オファー面談を経て、7月中旬から前職に対しての退職交渉と業務引継ぎを開始しました。退職の手続きに要したのは1か月半あまりでした。(入社時期とギャップがあることにお気づきかもしれませんが、有給消化期間がこの後に入ります。)
64+
65+
### 天秤
66+
67+
多くの場合、複数社の面接を並行して得た内定を元に選択をするのが王道ケースかと思います。が、上でも述べた通り消極的な転職活動をしていたこともあり、CyberAgent と同時期に内定を得た会社はありませんでした。
68+
したがって、私は **現職か転職か** の天秤をかけることになるわけです。そこで立ち返るのが、冒頭に設定した軸です。
69+
70+
> 私はフルスタックエンジニアになることを目指しており前職でもそれが実現できる技術スタック・人的環境であること。一方でチームが大きく個人の裁量が機能に依っているように感じられるのがジレンマであること。
71+
> これを踏まえ、小規模で全領域を手掛けられるサービス・企業があればより高速にフルスタックエンジニアへの道を歩めることが軸となりました。
72+
73+
この軸に沿ってフラットに考え、新しい環境に身を投じて新しいビジネス領域・技術領域で挑戦したいという意思のもと私は転職という道を選択しました。
74+
75+
### 退職の手続き
76+
ありがたいことに、私は前職で多くの業務や責務をいただいていました。いろいろなところに顔を出して、リーダー / スクラムマスター をいくつか務めさせていただいていました。
77+
以上のこともあり、業務引継ぎは本当に大変でした。(そして、本当にいろいろな方にご迷惑をおかけしました。)
78+
79+
- 引継ぎ業務の洗い出し
80+
- 引継ぎスケジュール策定と隔週での進捗管理
81+
- 引継ぎ資料(知識ゼロベースで引継げるレベル感)の準備
82+
- 引継ぎ者に対するインプット
83+
84+
をメイン業務と並行して行いました。引継ぎも不十分に退職をすれば、後釜となる方に多大なご迷惑を被ることになります。**美しい去り際とするためにも業務の引継ぎは徹底的に実施** したつもりです。(守秘義務により資料をお見せできないことが残念です。)
85+
86+
# 転職してどうだったか
87+
転職して2か月あまりが経ちますが、いまのところは **満足しています**
88+
89+
軸に対してのギャップはほぼないですし、よかったこと・よくなかったことを上げていますが総合的にはよかったかなと思っています。
90+
91+
### 転職してよかったこと
92+
前社と比較してよかったこと、CyberAgent としてよかったことの両方を含みます。
93+
94+
- 残業がなくなった
95+
- 新しい人的コネクションができた
96+
- 技術イベント・ゼミ活動が盛りだくさんで刺激的
97+
- さまざまな技術が利用されていて勉強になる
98+
- 前職や自分の経験を俯瞰できるようになった
99+
100+
### 転職してよくなかったこと
101+
102+
- 横の繋がりが希薄
103+
- レガシーなシステムの面倒を見ることもある
104+
- 信用貯金0からのスタート
105+
106+
あえていくつかピックアップしてみます。
107+
108+
> 転職してよかったこと
109+
> - 技術イベント・ゼミ活動が盛りだくさんで刺激的
110+
> - さまざまな技術が利用されていて勉強になる
111+
112+
CyberAgent はさまざまなプロダクトを扱っておりギークな方が多い印象です。これは、**外から見ても中から見てもギャップはありませんでした**。社内外を巻き込んだ技術イベントがほぼ毎月開催され、技術ゼミなんかもあります。
113+
自分が係るプロダクトでもバッチに EMR により分散処理や、Athena を利用したデータ分析など、いままで触れてこなかった技術に触れられるのは単純に刺激的でした。
114+
115+
> 転職してよかったこと
116+
> - 前職や自分の経験を俯瞰できるようになった
117+
118+
**井の中の蛙ではなくなった** ということです。そのうえで、前職での技術開拓や経験はとてもよいものだったと思っています。
119+
120+
> 転職してよくなかったこと
121+
> - 信用貯金0からのスタート
122+
123+
当然ですが、**転職で新しい環境に身を投じれば、その人への評価は0からのスタート** になります。
124+
これは、私が退職交渉をしているなかで話していただいたことでもあります。まあ当たり前のことなんですがね。
125+
126+
# エピローグ
127+
さて、今回は私の転職エントリーを書いてみました。言語化を通じ、転職を終えての思考の整理ができたので個人的にはよかったです。
128+
129+
転職は人生を大きく変える分岐点ですし、少しでも誰かの気づきや役に立つことがあれば幸いです。
130+

public/0e2871df78aed072291b.md

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
---
2+
title: Confluence ServerのREST APIを用いたページコピー
3+
tags:
4+
- JavaScript
5+
- jQuery
6+
- Ajax
7+
- Confluence
8+
- REST-API
9+
private: false
10+
updated_at: '2020-12-26T17:37:50+09:00'
11+
id: 0e2871df78aed072291b
12+
organization_url_name: null
13+
slide: false
14+
---
15+
#1行概要
16+
Confluence Serverの"Get content by id"と"Create content"APIを併用してコピーAPIを実現した。
17+
18+
#はじめに
19+
[Confluence](https://www.atlassian.com/ja/software/confluence)(以下、コンフル)はAtlassian社が開発している、いわゆる企業向けウィキシステム。
20+
私が4月から勤務している会社でもコンフルを導入しており、主に議事録や週報の作成・共有に使っている。
21+
22+
ふと週報を作成していて、コピー・命名作業が面倒だったので半自動化したいと思い立った。
23+
24+
#Confluence Server REST APIについて
25+
コンフルのAPIはREST形式になっており、パラメータを指定して叩くとJSON形式でデータが返ってくる。
26+
利用中のサービスによって**Server REST API****Clound REST API**を選択することになるが、弊社の場合は前者になる。
27+
なお、後者の方が圧倒的に用意されているAPIメソッドが多い。(コピーAPIも用意されている。)
28+
29+
- [0からREST APIについて調べてみた](https://qiita.com/masato44gm/items/dffb8281536ad321fb08)
30+
- [Confluence Server REST API Reference](https://docs.atlassian.com/ConfluenceServer/rest/7.3.5/) ←こちらを使用
31+
- [Confluence Clound REST API Reference](https://developer.atlassian.com/cloud/confluence/rest/)
32+
33+
#実装
34+
###1. 前準備
35+
まず、ページのコピーと自動命名を行うスクリプトを格納するページを新規に作成する。
36+
コピーをしたいページ、コピーを置きたいページとは異なるので注意。
37+
新規ページ作成後「HTML」マクロを埋め込む。
38+
<img width="232" alt="html.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/8956f0b8-d050-2bf1-e4f8-e3ee53a85cde.png">
39+
40+
###2. 処理の記述
41+
次のスクリプトを記述する。
42+
43+
大まかな処理の流れは次の通り。
44+
① Ajaxで**[Get content by id](https://docs.atlassian.com/ConfluenceServer/rest/7.3.5/#api/content-getContentById)**APIを叩く
45+
② コピー元のページBody情報を取得
46+
③ Ajaxをネストし**[Create content](https://docs.atlassian.com/ConfluenceServer/rest/7.3.5/#api/content-createContent)**APIを叩く
47+
④ コピー元のページBodyをコピー先のページBodyに代入
48+
⑤ おわり
49+
50+
今回はコピー先のページタイトルに、コピー日の日付(yyyymmdd形式)を指定している
51+
52+
```html
53+
54+
<script type="text/javascript">
55+
$(() => {
56+
$("#btn").click(() => {
57+
/**
58+
* コピー元のページID、コピー先のページID、スペースキーの指定
59+
*/
60+
const SRC_PAGE_ID = "【コピー元のページID】";
61+
const DST_PAGE_ID = "【コピー先のページID】";
62+
const SPACE_KEY = "【スペースキー】";
63+
64+
/**
65+
* ページタイトルの指定
66+
*/
67+
const today = new Date();
68+
const pageTitle =
69+
today.getFullYear()
70+
+ ("0"+ (today.getMonth() +1)).slice(-2)
71+
+ ("0"+ today.getDate()).slice(-2);
72+
73+
/**
74+
* 通信用ヘッダー
75+
*/
76+
const headers = {
77+
"Accept": "application/json",
78+
"content-type": "application/json"
79+
};
80+
81+
/**
82+
* ①② コピー元の情報取得
83+
*/
84+
$.ajax({
85+
type: "get",
86+
url: "https://【ドメイン名】/rest/api/content/" + SRC_PAGE_ID + "?expand=body.view",
87+
headers: headers,
88+
})
89+
.done((result) => {
90+
console.log(result);
91+
const srcPageBody = result.body.view.value;
92+
/**
93+
* ③④ コピー先の作成
94+
*/
95+
$.ajax({
96+
type: "post",
97+
url: "https://【ドメイン名】/rest/api/content",
98+
headers: headers,
99+
data: JSON.stringify({
100+
"type": "page",
101+
"ancestors": [{
102+
"id": DST_PAGE_ID
103+
}],
104+
"title": pageTitle,
105+
"space": {
106+
"key": SPACE_KEY
107+
},
108+
"body": {
109+
"storage": {
110+
"value": srcPageBody,
111+
"representation": "storage"
112+
}
113+
}
114+
}),
115+
success: () => {
116+
alert("Done");
117+
},
118+
error: () => {
119+
alert("Error:コピー先の作成に失敗しました。");
120+
}
121+
});
122+
})
123+
.fail(() => {
124+
alert("Error:コピー元の取得に失敗しました");
125+
});
126+
})
127+
})
128+
</script>
129+
<button id="btn">ページコピー</button>
130+
```
131+
132+
###3. パラメータの説明
133+
- **SRC_PAGE_ID****DST_PAGE_ID**:コピー元、コピー先のページID
134+
- **SPACE_KEY**:各スペースの一意IDで「スペース>スペース ディレクトリ」から確認可能
135+
136+
>ページIDは、ページURL
137+
>https://【ドメイン名】/pages/viewpage.action?pageid=
138+
>の末尾9桁の数字
139+
140+
###4. 挙動
141+
まずページ上には、`<button id="btn">ページコピー</button>`で記述したボタンが配置されており、ボタンを押下するとスクリプトが動く。
142+
コピー元ページの取得とコピー先ページの作成に成功すると、alertメッセージ「Done」と表示される。
143+
![done.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/ac1f0570-ff64-832a-2b4c-0191ba839c1f.png)
144+
145+
ページをリフレッシュすると、元のページツリーから
146+
<img width="109" alt="copymae.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/e3a907c7-e8fc-e94f-6531-161b6ce35309.png">
147+
指定したコピー先に新規ページが作成されている。
148+
<img width="117" alt="copyato.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/e1939c2d-bcf8-3019-1c91-cf26549db205.png">
149+
ここでは、SRC_PAGE_IDに「テストタイトルです」、DST_PAGE_IDに「02_COPY」というタイトルのペーのIDを指定しており、
150+
*DST_PAGE_IDが親で、コピー日の日付をタイトルにした、SRC_PAGE_IDの中身のページ*を作成することができた。
151+
152+
###5. 確認
153+
[Get content by id](https://docs.atlassian.com/ConfluenceServer/rest/7.3.5/#api/content-getContentById)で取得した中身を、`console.log(result)`から開発者メニューで確認することができる。
154+
![object.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488859/bf50f9e9-af0f-a2f5-cc73-0a98dc3b17c8.png)
155+
156+
#おわりに
157+
Confluence ServerのREST APIを利用したコピーメソッドを実現した。
158+
同様に、MoveやCommentといった*Cloud APIにはあって、Server APIにはないメソッド*がまだ多数ある。それらも実現できたらいいね(遠い目)。

0 commit comments

Comments
 (0)