# ぼくのメモ
セブン-イレブンでポイント還元中! 17
セブン-イレブンでキャンペーン中! 17
無難。しかしセブンの宣伝感
セブン-イレブンを抜くとキャンペーンが大きく見えてしまう
セブン-イレブンで毎週P100還元中 18
未KYC=未FTAは条件必要なのか?
メインテキストで察しろ・・と思いつつも
(preKYC postpay, bank)
設定→セブン-イレブンキャンペーン中 18
登録→セブン-イレブンキャンペーン中 18
Nazcaチケットの件はMktにも確認
CSレビューの返ってくる
# 2019/07/01
Product Requirement Document
# 2019/06/28
研修終わったー!みんなおつかれ!
(そしてお気づきだろうか、来週から配属である)
# 2019/06/27
Done
*
Do
Blocker
会員登録ができる
会員登録後ログインができる
ログインするとリストできて
リストするとタイムラインで見れる!
# 2019/06/25
Done
* Login -give out token
Do
* Login -auth with token
* Post-login UI
Blocker
So... how do I put that token in the header...?
結論から話す、かあ…うまくいかないなあ
# 2019/06/24
Done
* catch up…?
Do
* Login -give out token
* Login -check token
* Keihyoho Lunch 1300〜 18F CafeSpace
Blocker
JWT
# 2019/06/21
Done
Merged pull request of Backend Validation
Rough Login Page
Do
Backend of login
Blocker
喋るの弱いなー、特に時間感覚が消えてしまう問題困る…
* タイマーにどんな機能有ればましかな?
* いっそメモ使ったほうが全然よい
# 2019/06/20
Done
* made backend validation except for email check
* make email UNIQUE
* requested pull
Do
* rough Login page
# 2019/06/19
Done
* made backend validation except for email check
Do
* make email UNIQUE
* make rough UI for login page
* make backend for login
* Unique email
*
Blocker
payment 500
callbackがコールバックされる関数
コールバック(関数から関数を呼び出すこと)
var asyncBuyApple = function(payment, callback){
setTimeout(function(){ 遅らせる
if(payment >= 150){
callback(payment-150, null); callbackにお釣り計算して渡す
}else{
callback(null, '金額が足りません。'); 足りなかったら怒る
}
}, 1000);1000遅らせる
}
asyncBuyApple(500, ここにはお釣りが帰ってきてるfunction(change, error){
if(change !== null){ お釣りがある
console.log('おつりは' + change + '円です。');
}
if(error !== null){ お釣りそのものが存在しない
console.log('エラーが発生しました:' + error);
}
});
console.log('500円払いました。');
# 2019/06/18
Done
* merged branch on sign-up db insertion(data/signup)
* pulled merged master
* made new branch signup/validation
Do
* backend validation with express-validator...
half done? Unique email
* make rough UI for login page
* make backend for login
Blocker
* express- validator わからない…
docker-compose exec server sh -c 'cd /app/src && npx sequelize model:create --name justtesting --underscored --attributes name:string,email:string,introduction:text,hashed_password:string,status:enum:\{alive,dead\}'
queryInterface.changeColumn(
'user',
'email',
{
type: Sequelize.STRING,
allowNull: false,
unique: {
args: true,
msg: 'そのアドレスは既に使用されています'
}
}
)
queryInterface.changeColumn(
'user',
'email',
{
type: Sequelize.STRING,
allowNull: false,
unique: {
args: true,
msg: 'そのアドレスは既に使用されています'
}
}
)
# 2019/06/17
気になること
- [ ] サーバーの生のエラーをクライアントが見て解釈する仕組みだとフロントとバックエンドが密結合になってしまい非常に開発が難しくなります。たとえば { error: { key: "DB_INSERTION_FAILED", msg: "ユーザーの作成に失敗しました" } } などとわかりやすい形にしてみましょう。生のエラーはログに出せば良いです(デバッグ出力と違い、エラーを出力しておくのは本番環境で発生したエラーの原因を特定するのにとても役に立ちます)。
- [ ] console系でエラーが出るのはなんでやろ。ださいのかな…
# 2019/06/14
Today's todo
by today
- [ ] 良きPeerReview書けない死
Development
- [x] Check review
- [x]early returnについて調べないと使えなさそう
- [x]export defaultいらなくない?のとこ
- [x]axios requireはホント謎
-
- [ ] Backend Validation
- [ ] checkout -b check/tables
- [ ] 最終?確認
if possible
- [ ] connection系初めて見るから調べよう
- [ ] なんでポート80なの?
# 2019/06/13
Today's todo
Development
- [ ] Backend Validation
- [ ] Check review
- [ ] checkout -b check/tables
- [ ] 最終?確認
By 15:00
- [x] Agenda書いておかなきゃ
- [x] Can I reallllly explain WebAPI?
by tommorrow
- [ ] 良きPeerReview書けない死
if possible
- [ ] connection系初めて見るから調べよう
- [ ] なんでポート80なの?
# 2019/06/05
Today's todo
- [x] プルリクレビュー確認
- [x] ブランチview/signup にてレビュー見て修正+commit+push
- [x] ブランチをdata/signup
- [x] signup.vueとかを書き書き・・・
- [x] プルリクレビュー確認
- [x] パスワード確認どうしよう…単純に入力ミスの確認として必要な気もする。ミスってたら表示してみてもらう感じで。メルアドもその理屈で確認してるし。最後に持ってくるかないっそ
- [ ] ブランチview/signup にてレビュー見て修正+commit+push
POST手順
データバインディングで入ってるか確認したい
## Sprint Planning
ユーザー情報の登録ができる
ログイン/ログアウトができる
ユーザー情報の編集ができる
他ユーザーの詳細をみることができる
商品を出品できる
出品した商品の編集ができる
出品した商品の削除ができる
出品した商品の詳細を見ることができる
商品にコメントできる
商品を購入することができる(擬似的に。一旦決済は無視しましょう)
取引を(簡易的に)完了まで進めることができる
購入者が出品者を評価できる
出品者が購入者を評価できる
商品が一覧でみれる
カテゴリ毎に商品を一覧でみることができる
商品をお気に入りリストに追加できる
ログイン状態で閲覧できるマイページを見ることができる
マイページで購入した取引中商品一覧を見ることができる
マイページで購入した取引済み商品一覧を見ることができる
マイページで出品した出品中商品一覧を見ることができる
マイページで出品した取引中商品一覧を見ることができる
マイページで出品した取引済み商品一覧を見ることができる
マイページでお気に入りリストを見ることができる
マイページで自分の評価を見ることができる
商品を検索できる
新しい商品が追加された場合に通知がくる
ユーザの行動に基づいて商品がレコメンドされる
ユーザーがほしいものを伝えることができる(掲示板機能など)
## Merookies Day for Engineers (+NewgradPMs)
Suguru-san
エンジニア組織は急速に変化している。
Updates:
1. Mercari USの成長
2. Mercari JPの拡大
3. Merpayの開始
* Developing w/ various perspective
* Evolving with various abilities
Tech Strength→Productivity+Creativity
Micro-decision and micro-services
Futoshi Koresawa @sak0620
# 2019/05/28
送料別表記 on toolbar+ Detail's shipping fee
- [ ] SelectButtonを作る
- [ ] SelectButton付きのToolbarBeforeSelection
- [ ]
ContainerView持ってきたい
- [ ] xibの良いところって使いまわしできることだよね…どうやるんだ
- [ ] File's Owner
- [ ] そもそもこれ名前なに?ナビゲーションバー?
- [ ] どうやって表示してるの?
# 2019/05/27
起きてること
mercari-iosからクローンしてきた
ローカルでブランチ(test)切ってそこで作業した(ビルドできてた)
MasterとMergeしようとしたらコンフリクトしたので、TestのままDevdojoレポにプッシュ
Shishamo君がクローンしてビルド…できなかった(Error: could not find included file)
Mercari-iosでブランチ切って(nonsense) ローカルのtestをプッシュしたけど、やっぱりShishamo君のほうでエラー。それどころか自分でもエラー
ローカルのはビルドできる
feature/は自動でProtection対象!
プロダクトじゃないよってものはspike 使うと良い
what we have learned about scrum
# 2019/05/24
- [x] 下の固定バー
- [x] 「購入」ボタンを「サイズ・色選択」に変更
Purchase>Purchase>localizable.strings>localizable.strings(Japanese)
com.kouzoh.purchase.button.title.purchase ="購入手続きへ"を変更で変わった…
これさえできたら
- [x] ローカルを確認、マージしたいいいなんのエラーあああああああ
- [x] Nonsense-iosに投げる…
さて、Selection Pageに飛びたいわけだが…
- [ ] 構造的には多分itempageパクってくるのが正しそう。書き換えられるのかな…
- [x] コピーしてみる とりあえずできた。
- [x] Renameみたいの出てきたけどコピー元大丈夫かな?
戻せないからねって言ってきて怖かったからとりあえず保留で
- [x] ContainerViewってどうやって流し込んでるの?(無知)作れんのあれ(無知)
- [ ] table view ええやん(ええやん)
- [x] 要素増えたら勝手に増えてくれ
- [ ] UITableViewCellって必要?使ってみたい。選んだ時だっせえwww
- [x] 一個しか選べたらあかん
- [ ] 一個も選んでないのに買えたらあかん
- [ ] んで在庫0(在庫−isReserved=0)ならitem死んでくれ
- [ ] んで在庫少なかったら(在庫−isReseved<4?知らん)残りわずか表示してくれ
- [ ] 選ばれたのは…、がわからんとあかん。綾鷹
画像がなくてタイトルもなくてDescriptionもなくて…Scrollは欲しい
- [ ] ページ遷移勉強
func bindViewModel() {
if viewModel.isHideNavigationBarExperiment {
newPublicationContainerViewUnderPhoto.reactive.setupInjectableViewController(for: NewPublicationViewController.self, parentViewController: self)
<~ viewModel.childViewControllerAppearance()
} else {
newPublicationContainerView.reactive.setupInjectableViewController(for: NewPublicationViewController.self, parentViewController: self)
<~ viewModel.childViewControllerAppearance()
}
if viewModel.isCampaignAreaExperiment {
campaignAreaContainerView.makeContainer(for: CampaignAreaViewController.self, parentViewController: self, with: CampaignAreaViewController.Input.init(identifier: viewModel.store.state.identifier))
}
guideContainerView.reactive.setupInjectableViewController(for: GuideViewController.self, parentViewController: self)
<~ viewModel.childViewControllerAppearance()
if shouldShowQuickShippingLabel {
statusLabelContainerView.reactive.setupInjectableViewController(for: StatusLabelViewController.self, parentViewController: self)
<~ viewModel.childViewControllerAppearance()
}
let vc = InteractButtonsViewController(with: .init(identifier: viewModel.store.state.identifier), environment: environment)
interactButtonsViewController = vc
interactButtonsContainerView.makeContainer(with: vc, parentViewController: self)
descriptionContainerView.reactive.setupInjectableViewController(for: DescriptionViewController.self, parentViewController: self)
<~ viewModel.childViewControllerAppearance()
referenceItemsContainerView.makeContainer(for: RelatedItemsViewController.self, parentViewController: self, with: viewModel.store.state.identifier)
photoListContainerView.reactive.setupInjectableViewController(for: PhotoListViewController.self, parentViewController: self)
<~ viewModel.childViewControllerAppearance()
detailContainerView.reactive.setupInjectableViewController(for: ItemDetailSectionViewController.self, parentViewController: self)
<~ viewModel.childViewControllerAppearance()
guaranteeContainerView.reactive.setupInjectableViewController(for: ItemGuaranteeViewController.self, parentViewController: self)
<~ viewModel.childViewControllerAppearance()
// Car
guaranteeContainerView.reactive
.setupInjectableViewController(
for: Car.ItemDetailCarWarrantyGuideViewController.self,
parentViewController: self
) <~ viewModel.childViewControllerAppearance { state in
guard state.item?.hasCarWarranty == true else { return nil }
return .init()
}
guaranteeContainerView.reactive
.setupInteractableViewController(
for: LinkButtonViewController.self,
parentViewController: self
) <~> viewModel.childViewControllerBidirectionalBinder(
input: { LinkButtonViewController.Input.carWarrantyAgreement($0.item?.hasCarWarranty == true) },
output: { [unowned self] (_, _) in
self.environment.apply(input: LoggerInputCar.itemCarWarrantyAgreementTap)
let request = LegacyViewControllerRequest.WebBrowser(page: .buyerCarWarrantyTerms)
let vc = self.environment.apply(input: request).viewController
self.navigationController?.pushViewController(vc, animated: true)
}
)
sellerSectionContainerView.reactive.setupInjectableViewController(for: ItemSellerSectionViewController.self, parentViewController: self)
<~ viewModel.childViewControllerAppearance()
let itemMessageContainer = toolbarContainerView.makeContainer(for: ItemMessageViewController.self, parentViewController: self)
viewModel.childViewControllerAppearance(ItemMessageViewController.Input.init)
.producer.startWithValues(itemMessageContainer.input)
let toolbarContainer = toolbarContainerView.makeContainer(for: ItemToolbarViewController.self, parentViewController: self)
viewModel.childViewControllerAppearance(ItemToolbarViewController.Input.init)
.producer
.startWithValues(toolbarContainer.input)
toolbarContainer.output { [weak self] output in
switch output {
case .close:
self?.viewModel.handleAutoLike(source: .purchaseDrop)
}
}
let toastContainer = toastContainerView.makeContainer(
for: ToastAutoLikeViewController.self,
parentViewController: self,
with: ToastAutoLikeViewController.Input(
identifier: viewModel.dataGateway.apply(request: Token.Get()),
imageURL: viewModel.store.state.item?.thumbnails.first))
toastContainer.output { [weak self] (output) in
switch output {
case .goToLike:
self?.goToLikeView()
}
}
if viewModel.isHideNavigationBarExperiment {
navigationContainerView.makeContainer(for: NavigationBarViewController.self, parentViewController: self, with: viewModel.store.state)
} else {
navigationContainerView.isHidden = true
}
viewModel.title.producer.startWithValues { [weak self] title in
self?.title = title
}
viewModel.navigateToShareView.observeValues { [weak self] requirements in
self?.navigateToShareView(with: requirements)
}
viewModel.navigateToErrorView.startWithValues { [weak self] message in
self?.navigateToErrorView(with: message)
}
viewModel.updateLayoutForPortrait.observeValues { [weak self] (isPortrait) in
self?.updateLayout(isPortrait: isPortrait)
}
viewModel.dismissToast
.observeValues { [weak self] in
self?.closeToastAnimation()
}
photoListContainerRefreshControl.reactive.refresh = viewModel.refresh()
viewModel.showAutoLike
.observeValues { [weak self] autolikeType in
switch autolikeType {
case .fullscreen:
self?.showAutoLikeModal()
case .toast:
self?.openToastAnimation()
}
}
photoListContainerScrollView.reactive.signal(forKeyPath: "contentOffset").filterMap { $0 as? CGPoint }
.observeValues { [weak self] contentOffset in
guard let self = self else { return }
guard let vc = self.interactButtonsViewController?.titleViewController else {
return
}
let titleRect = vc.view.convert(vc.view.bounds, to: self.view)
let navigationBarMaxY = self.navigationContainerView.convert(self.navigationContainerView.bounds, to: self.view).maxY
let degree = ItemDetailViewModel.calculateNavigationBarThemeDegree(titleRect: titleRect, navigationBarMaxY: navigationBarMaxY)
self.viewModel.update(navigationBarThemeDegree: degree)
}
}
## やりたいこと
- えっターミナルオートコンプリートできんの!?やる!
- 重い…なんとかしたい
- とりあえずキャッシュ捨てた
- Finder 眩しいな…
-
# 2019/05/23
mercari-ios UI edit
## Todo
- [x] Seller info
- [x] change "mercari-official" picture (becareful there's 3 sizes to it)
- [x] ついてくる可能性のあるquick shipper殺す
- [x] Descriotion
- none
- [x] Details
- [x] カテゴリーはそのまま
- [x] サイズと色は消す(今回は)
- [x] 状態についてくる可能性のある保証表示を殺す
- [x] 別途送料 赤色にした(大げさかな?)
- [x] 発送方法消す
- [x] 状態を「新品、オフプライス品」固定で表示
- [x] Guarantee
- 特商法表記
- [x] comments
- 殺すとSeller infoも死ぬのでコードを読みつつ殺す…?←よく見たら普通に殺せたわ
- [x] Related Items
- [x] マージンなさすぎてダサい・・・。-20?
- [ ] 下の固定バー
- [ ] 「購入」ボタンを「サイズ・色選択」に変更
- [x] とりあえず「送料別〇〇円流し込み」って直で書き換えれたんだけど、気になるのは着払いも元払いも変更になったこと…データから取ってるんじゃないのか…?
- [x] 元のお値段表示せな
- [x] オファーボタン出てきても困るけどデモでは出てくる可能性が低いので無視。
(税込)表示なんてあるのか!普段隠されているけど。はえ〜
- その他作業途上で出たエラー系
- [x] 表示崩れまくり問題。AlignつけるとInternal errorは草。どうもShippingDurationをなにか編集してしまった?(StackView付♡)
2019-05-23 16:37:52.324942+0900 Mercari[43909:1246688] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/h-shoji/Library/Developer/Xcode/DerivedData/Mercari-effzjprawrjsizbnbsguvkhuhsbh/Build/Products/Debug-iphonesimulator/ItemDetail.framework> (loaded)' with name 'ShippingDurationViewController''
*** First throw call stack:
んん?x.xibってなんや…→いつの間にかRenameしてた…死ゾ…orz
- []
購入ボタン、お前だったのか…
/Users/h-shoji/iOSstudy/mercari-ios/Projects/Purchase/Purchase/Views/Public/PublicPurchaseButton/PublicPurchaseButtonViewController.xib
- つなげる時にやらないといけないこと
- [ ] Seller info
- [ ] jump to Profile page
- [ ] Title
- [ ] jump to Review page
- [ ] Description
- [ ] Detail
- [ ] Category
- [ ] 状態は固定
- [ ] 別途送料のValueは今は「購入者/出品者負担」をItemsから取ってきてるはず
→Buyer住所の何々県へ(BSeller参照)〇〇円にする
- [ ] 発送元(倉庫の場所)
- [ ] 発送日数→到着までの日数
- [ ]Tokushoho
- [ ] Guaranteeのコンテナタップで遷移
- [ ] 遷移先ページにはSellerの特商法表記流し込み、商品に戻るボタン
- [ ] 下の固定バー
- [ ] 今値段・元値段(Strik out+矢印マーク)流し込み。
- [ ] 値段の上に「送料別〇〇円」または「送料別」表示。後者なら単純にラベル書き換えるだけで済むと思う。
- [ ] 現購入ボタンからサイズや色選択へ飛び、選択画面の購入で購入ページへ
memo Itemsellersectionviewer.swift
から削除
quickShipperBadgeContainerView.reactive.setupInjectableViewController(
for: QuickShipperBadgeViewController.self,
parentViewController: self
) <~ viewModel.quickShipperBadgeInput
ItemSeller Section Viewcontrollerはたぶんambiguousひっかかる
## やりたいこと
- えっターミナルオートコンプリートできんの!?やる!
- 重い…なんとかしたい
- とりあえずキャッシュ捨てた
# 2019/05/22
## What I learned
git status
git checkout -- file.name
there's auto completion on terminal... gotta search for it!
Something is going on especially in item view after xcode update 10.2
Scrum
- Talk bad news, don't talk about solution
- Talk one at a time
- Everyone talks
- Same place, same time.
# 2019/05/20
## Product backlog refinement & Sprint planning
1. Let's see what we have now on Kanban board, are they worth keeping? I guess so...?
2. In group, Look into each task and make subtasks to it.
3. Considering the subtasks inside, are they small enough for a sprint/kanban board? If not, how can we cut it down? (maybe cutting down should be done in each group)
4. Check for connection between group, are they linked by some task?
Our Try for Sprint2:
- make the task smaller
- write completion criteria on smaller tasks
- use kanban-board
- use English more!!!!
## GitHub repository
How to create new GitHub repository to develop / 開発用のGitHub repositoryの作成手順
### Important
- Create a new repository on *kouzoh* org / kouzoh orgに新しいrepositoryを作成する
- You may create more than one repo if you neee / 必要な場合は複数作成可
- Please follow the naming convention / 下記の命名規則に従う
- Make these repos *private* / 作成するrepositoryはprivateにする
- Add the following teams to teams in these repos / 作成後、repositoryのteamsに以下のteamを追加する
- all-engineers
- all-designers
- all-producers
### Naming convention / 命名規則
`devdojo-{team_name}-{free_words/api,web,ios etc...}`
## GCP Project for DevDojo
### Terraform settings for Project / Project管理用terraformについて
GCP Project members are managed by this tf file / 以下のrepositoryのファイルで、projectのmemberを管理している
https://github.com/kouzoh/terraform-gcp-projects/blob/master/kouzoh-jp-project.tf
Project numbers correspond to team numbers / projectの番号はチーム分けの番号に対応している
https://docs.google.com/presentation/d/1RViL8sAGoRSDTswAujd-wvl_BmPsgBOgdWJM50KeHSo/edit#slide=id.g57f004626a_0_46
### How to add members to Project / Projectにmemberを追加する
- Create a pull request after adding your team members to kouzoh-jp-project.tf / kouzoh-jp-project.tfに自チームのprojectに自チームメンバーのメールアドレスを追加し、Pull Requestを作成する
- Add @lainra and @YuiSakamoto to the pull request reviewer / Pull RequestのReviewerには @lainra と @YuiSakamoto を追加
- When CI succeeds after merged into master branch, You will be able to access to your GCP Project with your account / Pull RequestがapproveされmasterにmergeされるとCIが走り、完了するとそれぞれのアカウントでGCP Projectにアクセス出来るようになる
## Q&A
Please post your questions about the dev environment to this thread / 環境についての議論はこのスレッドに集約してください
Sprint review
Product Review
Frontend Backend 連携Task登録
Mark Backlog以外のタスクが増えた 新しいタスク
在庫管理のDB メルカリAPIからデータの入力することころやっている
Inspect increments
discuss value for next sprint
Demonstrate software created by product backlog item to `stakeholders` .(CSとかmarketingとかのひとも入る。関係してほしいひと)
Share what change of product and requirements if you have.
Tips
- Show software even it's backend, even it's just a component.curl command, Mock, just component...
- Avoid to share incomplete product backlog item.
- Acceptance decision should be made decision before this.
- make next sprint backlog
POは(判断に時間がかかるので)事前に見ておく
Think about demo too as make product backlog.( During Sprint plannning, make it a task.)
Retrospective
Process review
Prioritization and process
find what we can improve
- look back your way of work in the sprint
- there are some ways, but KPT is popular
KPT Keep Problem Try
- Keep focus to the process
- select simpler action than complex(シンプルかつ効果のあるもので)
- don't blame a person(チームが壊れる…)
- Don't focus your team cannot change in the next sprint
(人足りないから中途採用しよう、とか時間がかかるから次スプリントできないよね)
# 2019/05/17
英語でMinutesとっていくよ!メモは日本語かも
- [ ] スクラムの話す順をMinuteのままで固定だよー
## やったこと
- [x] ProductSpec詰めて 細かな仕様を優先順位付けする(グレーアウトは低いのでスキップ可)
それでいいかチェックしてくれるとありがたい。異議あったらすぐ教えてください
- [x] こまかなSketchの変更点を反映、css変換のときトラブルにならないようゴミデータを消した。
## やること
- [ ] 今iOSって何すればいいかな…@shishamoくんに邪魔しない程度に聞く…
- [ ]
- [ ]
- [ ] SlackbotでDailyHuddleお知らせしたい!
## blocker
というか共有。昨日意気揚々とSketchアップしてましたが、特商法表記の記入フォーム忘れてたので、
その後チームドライブに更新したもの上げました。ファイルアップした時のやつスレにして、チームドライブ貼っつけておいたのでそちらから最新版見てください。
# 2019/05/16
- [x] ProductSpec詰める
- [x] WebUI Product Specの中の仕様を優先順位付けする
- [x] App UI 優先順位付
- [x] 範囲を指定ボタンを選択ボタンに変更する
- [x] 配送管理の表示がおかしいところを直す
- [x] なるべく整形する…!
- [x] when there is different input in name, description etc. of same item-numbered item, choose the data in upper row and ignore ones in later row. (example below)【Check priority】
- [x] 型番は管理画面でeditできるべき?
- [ ] Sprint Review/Retrospectiveについて復習しておく…必要なDocとかあるのかな
- [ ]
## Blocker
# 2019/05/15
健康診断がござったぞ。ほぼ問題なし。
しかし当日できない検査を21日に持ち越しをされてしまった。
なのに45分終了を普通に押した…。
## やったこと
UI
スクラムマスターになった。スクラムの何たるかを知りたい…
## やること
Name, descriptionが同一商品で違うときの対応、
- [x] 一番上を優先的に表示する/
- [x] CSVのマニュアル・注意書き
- [x] イメージカラム(1~10)追加
- [x] Formに型番入力を追加
- [x] Zip fileの中身は・・?
今後書く!(とりあえずは大丈夫なファイルくわせる)
- [x] 出品停止-普通にリスティングから消える IDとかデータは保持(Specに追加)
- [x] 配送日数について選択肢から選ばせる
- [ ] 印刷idのところは配送選択の表示。(上の範囲指定で指定された場所が選択される。)クリックすると選択を外すことができる。
- [x] 日時範囲指定とアイテム指定ができる
- [x] Shipping fee追加
- [x] 簡単なTransaction計算できればベスト(Priority low)
追加する仕様
Selected, ordered date, item name, color, size, shipping address, paid amount, shipping fee, price of actual transaction, delivered/not
・order by ordered date by default
・only show "not delivered" by default
・on the form of range selection, set placeholder to show what kind of inputr is wanted.
# 2019/05/14
## やったこと
App UIをちょくちょく修正
## やってること
Web UIにちょくちょく修正加えつつ、固まってないところを詰めてる。
Product docを完璧にしないと…
## Blocker
Design Doc無いじゃん!(絶望)ということで差し戻し…
## todo
ContactPageUI
Product spec check
WebUIへ赤入れ+Appの再確認
もっとスクラムを理解しておく;;
## 気になるメモ
検索の条件あり→引っかかるようにする、という必要性
- 「検索条件:赤 サイズ:M」
→赤のMの在庫があるオフプライスだけ検索に出てくる。
# 2019/05/13
## やってること
・商品ページに入るのでUIの最終確認
・それに付随して購入ページのUI再検討
## Blocker
### 点数をそもそも決められるべきなのか
全く同じ商品でも点数によって送料が変わる(シャツ2着と10着では送料変わる)から一律で送料つけられないよね…
同じブランド・同じ場所から発送されるものはまとめるなら送料もまとめられるべきなのか
#### 【結論】点数をデフォルト(1着のみ)にする
・数量選択できなくていい
Bad:Userは例えば二着ほしいけど送料二回払うのなんか悔しいってなるかも
・3スプリント(ココ重要)
#### ~~②点数を選べるようにする(単一商品)~~
~~・送料のロジックが必要になる~~
~~(3着までは一律、その後3着ごとに200円追加みたいな)
・何基準で値上がり?
・Backendに実装~~
#### ~~③点数を選べるようにする(複数商品)~~
~~・cross-itemのカート機能必要になってくる
あるブランドのヘアアクセ 赤:1点
あるブランドのシャツ 白:M:2点
1点200円なら 送料で600円?~~
simple memo
UX flow
[新卒プロデューサーがID連携プロジェクトに携わって学んだこと](https://mercan.mercari.com/articles/2016-10-14-143000/)
アプリを作るだけ、ではいけない。その裏や周辺のオペレーションをプロデュースできて初めて一人前
考えて考えて精度をすごく上げて、やることを絞る
届けたい価値を間違えず、ぶらさず、最速で届ける
[](https://mercan.mercari.com/articles/2017-09-08-160000/)
その時のフェーズや規模によって検討方法やプロセスの見直しをする
学びを言語化することで、応用が効く「活かせる学び」になり、Aの部分である次に向けた改善や修正ができる
。余計な確認作業や承認作業がないのでむしろ「本当にこれでいいの?」と不安になる位に、個人の裁量にまかせてくれている印象です
→その分自分でどこまで突き詰められるのか
限りなくベターなロードマップを更新し続ける
PMとしては特にドキュメントにゴール、背景、KPIをしっかりと書いてチームの意思を統一させることですね。ズレをミニマムにするかがポイントかなぁと。
USだとMVP(=必要最低限の機能)でのPDCAを日本以上に大事にしていて、とにかくスピード、やってみてから考えようという意識が強い
自分も含めてメンバーが楽しんで仕事ができるような雰囲気作りや開発進行に努めていました